我有点头疼,因为这是我在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很痛苦。
谢谢大家!