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)
Задача ещё не решена.
Других решений пока нет …