Problème avec filtre moyenneur "flou uniforme" d’une image
Salut :)
Je dois filtrer une image bitmap en niveau de gris par un filtre moyenneur (flou uniforme),vous pouvez voir le résultat de ce filtre dans ce lien: http://xphilipp.developpez.com/artic...s/?page=page_4
Quand j’ai exécuté mon code l’image en résultat été défectueuse.
mon code du filtre moyenneur est le suivant :
Code:
1 2 3 4 5 6 7
| for(i=0;i<=Form1->Image1->Picture->Height-1;i++)
{
for( j=0;j<=Form1->Image1->Picture->Width-1;j++)
{
Form1->Image2->Canvas->Pixels[i][j]=(Form1->Image1->Canvas->Pixels[i-1][j-1]+Form1->Image1->Canvas->Pixels[i-1][j]+Form1->Image1->Canvas->Pixels[i-1][j+1]+ Form1->Image1->Canvas->Pixels[i][j-1]+ Form1->Image1->Canvas->Pixels[i][j]+Form1->Image1->Canvas->Pixels[i][j+1]+Form1->Image1->Canvas->Pixels[i+1][j-1]+Form1->Image1->Canvas->Pixels[i+1][j]+Form1->Image1->Canvas->Pixels[i+1][j+1])/9;
}
} |
je vous joins le résultat de cette exécution comme une image.
Est ce que quelqu'un peut m'explique pourquoi j'ai pas eu le même résultat qui est donné sur le lien si dessus ??
Merci d'avance.:)
Problème avec filtre moyenneur " flou uniforme" d'une image
Salut;)
Merci pour henderson et b_reda31,
Avec la solution de henderson, l'image de resultat ne s'affiche pas voici le code que j'ai mis:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
TCanvas *C1 = Image1->Picture->Bitmap->Canvas;
TCanvas *C2 = Image2->Picture->Bitmap->Canvas;
Byte r;
for(int x=0;x<=Form1->Image1->Picture->Height-1;x++)
{
for( int y=0;y<=Form1->Image1->Picture->Width-1;y++)
{
r = (Byte)(((C1->Pixels[x-1][y-1] & 0xFF) + (C1->Pixels[x-1][y] & 0xFF)+(C1->Pixels[x-1][y+1] & 0xFF)+(C1->Pixels[x][y-1] & 0xFF)+(C1->Pixels[x][y] & 0xFF)+(C1->Pixels[x][y+1] & 0xFF)+(C1->Pixels[x+1][y-1] & 0xFF)+(C1->Pixels[x+1][y] & 0xFF)+(C1->Pixels[x+1][y+1] & 0xFF)) / 9);
C2->Pixels[x][y] = (TColor)(RGB(r,r,r))
}
}
; |
j'aimerai bien utiliser cette solution des pointeurs pour optimiser le temps de réponse , est ce que j'ai fait des erreurs dans là dessus??
Avec la solution de b_reda31, le problème est réglé mais le temps de réponse est très long voici le code:
Code:
1 2 3 4 5 6 7 8 9
|
Byte r;
for(int x=0;x<=Form1->Image1->Picture->Height-1;x++)
{
for( int y=0;y<=Form1->Image1->Picture->Width-1;y++)
{
r=(((GetRValue(Image1->Canvas->Pixels[x-1][y-1]) ) +(GetRValue(Image1->Canvas->Pixels[x-1][y]))+(GetRValue(Image1->Canvas->Pixels[x-1][y+1]))+(GetRValue(Image1->Canvas->Pixels[x][y]))+(GetRValue(Image1->Canvas->Pixels[x][y+1]))+(GetRValue(Image1->Canvas->Pixels[x+1][y-1]))+(GetRValue(Image1->Canvas->Pixels[x+1][y+1])) )/ 9);
Image2->Canvas->Pixels[x][y] = RGB(r,r,r);
}} |
Merci d'avance :)
Problème avec filtre moyenneur "flou uniforme" d’une image
Salut henderson :)
:oops: désolez je pose peut être beaucoup de question, Est ce que vous pouvez m'expliquez cette partie:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Byte *Ym;
Byte *Y;
Byte *Yp;
Byte *Dst;
int r;
for(int y = 1; y < he; y++)
{
Ym = (Byte*)Srce->ScanLine[y];
Y = (Byte*)Srce->ScanLine[y + 1];
Yp = (Byte*)Srce->ScanLine[y + 2];
Dst = (Byte*)Dest->ScanLine[y + 1];
for(int x = 1; x < we; x++)
{
r = (Ym[-1] + *Ym + Ym[1] +
Y[-1] + *Y + Y[1] +
Yp[-1] + *Yp + Yp[1]) / 9;
Dst[x] = (Byte)r;
Ym++;
Y++;
Yp++;
}
} |
?
même avec cette solution, l'image résultante ne s'affiche pas sachant qu'il n'y a pas d'avertissements/ erreurs du compilateur :roll:
Je vous remercie :)