J'utilise une boîte à outils d'étalonnage basée sur OpenCV 1.0 à laquelle je fais de petits ajouts. Mes ajouts nécessitent l'utilisation de la bibliothèque FFTW (OpenCV a des fonctions DFT mais ils ne me conviennent pas).Accéder aux valeurs de pixels d'image OpenCV 1.0 et les utiliser dans FFTW
J'ai essayé d'accéder aux valeurs de pixels d'une image et de stocker ces valeurs de pixels dans une variable de type FFTW_complex. J'ai essayé beaucoup de différentes suggestions (y compris la documentation d'openCV) mais j'ai été incapable de faire ceci correctement.
Le code ci-dessous n'entraîne aucune incohérence avec les types de variables lors de la construction ou lors du débogage; cependant, les valeurs de pixels obtenues et stockées dans "testarray" sont une répétition des valeurs [13, 240, 173, 186]. Est-ce que quelqu'un sait comment accéder aux valeurs de pixels et les stocker dans des matrices/conteneurs conformes à FFTW?
//.....................................//
//For image manipulation
IplImage* im1 = cvCreateImage(cvSize(400,400),IPL_DEPTH_8U,1);
int width = im1 -> width;
int height = im1 -> height;
int step = im1 -> widthStep/sizeof(uchar);
int fft_size = width *height;
//Setup pointers to images
uchar *im_data = (uchar *)im1->imageData;
//......................................//
fftw_complex testarray[subIM_size][subIM_size]; //size of complex FFTW array
im1= cvLoadImage(FILEname,0);
if (!im1)printf("Could not load image file");
//Load imagedata into FFTW arrays
for(i = 0 ; i < height ; i++) {
for(j = 0 ; j < width ; j++) {
testarray[i][j].re = double (im_data[i * step + j]);
testarray[i][j].im = 0.0;
}
}
Je trouve le problème. J'avais utilisé la mauvaise approche pour y accéder.
C'est ce que je:
testarray[i][j].re = ((uchar*)(im1->imageData + i *im1->widthStep))[j]; //double (im_data[i * step + j]);