2

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

4

1 に答える 1

0

私はVisual Studio 2008でC++を使用していますが、これが使用方法です:

画像を通過するためのそのようなループがある場合:

    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;

それが役に立てば幸い!

アントニオ

于 2011-11-24T08:15:34.943 に答える