访问OpenCV 1.0图像像素值并在FFTW中使用它们

时间:2011-11-22 23:01:47

标签: opencv pixel fftw

我正在使用基于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 :(得分: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;

希望它有所帮助!

安东尼奥