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