2011-11-22 1 views
2

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]); 

Répondre

0

J'utilise C++ dans Visual Studio 2008, ce qui est la méthode consiste à utiliser:

Si nous avons une boucle comme ça pour passer par l'image:

for (int y = 0 ; y < height; y++){ 
     for (int x = 0 ; x < width ; x++){ 

Ensuite, l'accès à la variable FFTW (appelons-le A) se fera comme suit:

A [ height * y + x][0] = double (im_data[height * y + x]); 
    A [ height * y + x][1] = 0; 

Espérons que ça aide!

Antonio

Questions connexes