为什么minMaxLoc返回废话并且图像全黑?

时间:2015-11-29 07:42:02

标签: c++ opencv opencv3.0

我有点头疼,因为这是我在OpenCV 2.4中必须完成的一千次,但在OpenCV 3中不起作用。

问题如下:

cv::Mat disparity = cv::Mat::zeros(input_left.rows, input_left.cols, CV_32FC1); // I initialize the matrix like this
//Loop:
    disparity.at<float>(y, x, 1) = float value; // I fill it up in a loop

这似乎工作正常,因为当我使用:

打印循环中的值时
std::cout << "x = " << x << ", y = " << y << " - " << disparity.at<float>(y, x, 1);

我得到了我期待的价值观。现在,我需要将浮点值转换为uchar mat,我总是通过调用normalize来获取介于0-255和convertTo之间的值来更改表示。由于某种原因,这个失败了(结果全是零),所以我试图这样做:

double d_minVal = 0.;
double d_maxVal = 0.;
cv::minMaxLoc(disparity, &d_minVal, &d_maxVal);

自己缩放像素。我知道值在那里,因为当我逐个像素地打印出差异时,我得到的值在0到400之间,正如预期的那样,但minMaxLoc返回:

d_minVal = d_maxVal = 2.42214e-41

这完全错了。

没有错误,没有什么可继续的。这只是一个奇怪的表现矩阵。大多数OpenCV函数就像充满了接近零的值一样。我不知道OpenCV 3.x行为有什么变化吗?我将切换回2.4,但我已经花了几个小时重写该套装中的另外10个应用程序以使用3.0。或者我只是遗漏了一些明显的东西?

我现在要尝试自己调试,但lldb很痛苦。

谢谢大家!

0 个答案:

没有答案