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)