Доступ к значениям пикселей изображения OpenCV 1.0 и их использование в FFTW - PullRequest
2 голосов
/ 23 ноября 2011

Я использую набор инструментов калибровки на основе OpenCV 1.0, к которому я делаю небольшие дополнения.Мои дополнения требуют использования библиотеки FFTW (в OpenCV есть функции DFT, но они мне не нравятся).

Я пытался получить доступ к значениям пикселей изображения и сохранить эти значения пикселей в FFTW_complex.переменная типаЯ перепробовал много разных предложений (включая документацию openCV), но я не смог сделать это правильно.

Приведенный ниже код не вызывает каких-либо противоречий с типами переменных во время сборки или во время отладки;однако значения пикселей, полученные и сохраненные в «testarray», являются повторением значений [13, 240, 173, 186].Кто-нибудь знает, как получить доступ к значениям пикселей и сохранить их в 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;
        }
    }

Я обнаружил проблему.Я использовал неверный подход для доступа к нему.

Вот что я использовал:

testarray[i][j].re = ((uchar*)(im1->imageData + i *im1->widthStep))[j]; //double (im_data[i * step + j]);

1 Ответ

0 голосов
/ 24 ноября 2011

Я использую C ++ в Visual Studio 2008, и вот способ использования:

Если у нас есть подобный цикл для прохождения изображения:

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

Тогда доступ к переменной fftw (назовем ее A) будет выполнен следующим образом:

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

Надеюсь, это поможет!

Antonio

...