来自OpenCV dft()C ++的NaN值

时间:2013-10-11 10:49:02

标签: c++ opencv nan dft

HIHO,

我真的无法弄清楚这个。

我使用的是opencv 2.4.2。

以下示例中的dft() - 函数生成 包含至少一个NaN值的图像 对于compute() - 函数的最后一次调用。

在更改代码中的任何内容时, 即使它不影响dft, 然后它突然起作用了。

代码只是问题的一个最小例子 和一个巨大的项目的一部分。代码的某些部分无法制作 任何这样的感觉,但它只是为了向你展示这个问题。

现在问题是"我做错了什么?" 我希望代码能像这样工作。 我附上了图片以防万一有人想试试自己。

#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

const std::vector<float> compute(const cv::Mat& image)
{
    cv::Mat workingImage;
    cv::Mat imgDFT;
    cv::Mat img;

    cv::cvtColor(image, workingImage, CV_BGR2GRAY);
    cv::resize(workingImage, img, cv::Size(256, 256));

    std::vector<float> result = std::vector<float>(1, 0);
    cv::copyMakeBorder(img, img, 32, 32, 32, 32, cv::BORDER_REFLECT);
    img.convertTo(img, CV_32FC1);

    cv::dft(img, imgDFT, cv::DFT_COMPLEX_OUTPUT);

    if (!cv::checkRange(imgDFT)) 
        std::cerr << "NaN in imgDFT" << std::endl;

    return result;
}

int main(int argc, char* argv[])
{
    std::vector<float> descriptor0 = compute(cv::imread("1.jpg", CV_LOAD_IMAGE_COLOR));
    std::vector<float> descriptor1 = compute(cv::imread("1.jpg", CV_LOAD_IMAGE_COLOR));
    std::vector<float> descriptor2 = compute(cv::imread("2.jpg", CV_LOAD_IMAGE_COLOR));
}

http://i.stack.imgur.com/OcK44.jpg(1.jpg) http://i.stack.imgur.com/wBU8a.jpg(2.jpg)

0 个答案:

没有答案