Hello,
Dans le cadre d'un de mes projets je suis amené à réaliser une fonction de détection de contour d'une forme simple mais avant de proceder à cette opération je souhaiterais prétraiter mon image en entrée afin de la standardiser : Je voudrais obtenir une représentation bitmap de l'image en 256 niveaux de gris que je pourrais stocker par la suite dans une matrice pour la suite de mes opérations.
J'ai donc écrit le code suivant ( inspiré par un article de projetomega.org ) ( sachant que mon image de départ est un NSImage nommé motif ) :
Je pensais que ce code marcherait pour n'importe quelle image en true color ( même avec une couche alpha ) mais après avoir testé mon programme mes résultats sont assez décevants :
Pour quelques images, j'obtiens parfaitement une version en niveaux de gris mais pour beaucoup d'autres j'obtiens juste une image incohérente...
Si quelqun pouvait m'aider à avancer ce serait hyper-sympa ( j'ai cherché dans le forum pour voir si qqun avait deja eu le même type de problème mais je n'ai rien trouvé )...
Merci d'avance.
Dans le cadre d'un de mes projets je suis amené à réaliser une fonction de détection de contour d'une forme simple mais avant de proceder à cette opération je souhaiterais prétraiter mon image en entrée afin de la standardiser : Je voudrais obtenir une représentation bitmap de l'image en 256 niveaux de gris que je pourrais stocker par la suite dans une matrice pour la suite de mes opérations.
J'ai donc écrit le code suivant ( inspiré par un article de projetomega.org ) ( sachant que mon image de départ est un NSImage nommé motif ) :
Bloc de code:
//Déclaration des variables d'image/representation d'image
NSBitmapImageRep *MotifBitmap = [NSBitmapImageRep
imageRepWithData:[motif TIFFRepresentation]];
int w = [MotifBitmap pixelsWide];
int h = [MotifBitmap pixelsHigh];
NSImage *MotifGris = [[NSImage alloc] initWithSize:NSMakeSize(w,h)];
NSBitmapImageRep *MotifGrisRep = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL
pixelsWide:w
pixelsHigh:h
bitsPerSample:8
samplesPerPixel:1
hasAlpha:NO
isPlanar:NO
colorSpaceName:NSCalibratedWhiteColorSpace
bytesPerRow:NULL
bitsPerPixel:NULL] autorelease];
//Parcours de l'image pixel par pixel
unsigned char *srcData = [MotifBitmap bitmapData];
unsigned char *destData = [MotifGrisRep bitmapData];
unsigned char *p1, *p2;
int n = [MotifBitmap bitsPerPixel] / 8;
int x,y;
for ( y = 0; y < h; y++ ) {
for ( x = 0; x < w; x++ ) {
p1 = srcData + n * (y * w + x);
p2 = destData + y * w + x;
*p2 = (unsigned char)rint((*p1+*(p1+1)+*(p1+2))/3);
}
}
//Affichage du résultat dans un NSImageView nommé apercu
[MotifGris addRepresentation:MotifGrisRep];
[apercu setImage:MotifGris];
Je pensais que ce code marcherait pour n'importe quelle image en true color ( même avec une couche alpha ) mais après avoir testé mon programme mes résultats sont assez décevants :
Pour quelques images, j'obtiens parfaitement une version en niveaux de gris mais pour beaucoup d'autres j'obtiens juste une image incohérente...
Si quelqun pouvait m'aider à avancer ce serait hyper-sympa ( j'ai cherché dans le forum pour voir si qqun avait deja eu le même type de problème mais je n'ai rien trouvé )...
Merci d'avance.