Я использую набор инструментов калибровки на основе 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]);