我的程序中有一个通道矩阵,下一个定义是:
matchingResult.create(result_cols, result_rows, CV_32FC1);
它不是颜色矩阵 我使用 minMaxLoc 方法查找最小值和最大值的位置:
double minValue;
double maxValue;
cv::Point minLocation;
cv::Point maxLocation;
cv::minMaxLoc(_matchingMap, &minValue, &maxValue, &minLocation, &maxLocation);
此方法返回正确的值:
MinValue:-287909 MaxValue:682182 MinLocation:[5,1] MaxLocation: [4,2]
如果我将矩阵打印到 cout ,我会得到相同的结果。
但是我无法通过使用max value(maxLocation)的位置从矩阵中获得相同的值,或者更改max的值。 如果我试图获得价值:
double value = _matchingMap.at<double>(maxLocation);
std::cout<<"Value for "<<maxLocation << " is "<<value << std::endl;
我会得到一些奇怪的东西:
[4,2]的值是-1.08215e + 39
我想通过使用row / coll坐标来更改矩阵中的值,但我做错了。我找不到错误,可能smb可以告诉我正确的方法。
如何迭代我见过的矩阵here
答案 0 :(得分:2)
使用32FC1初始化Mat时,您需要分配32位的单元格,这些单元格由C中的float
表示。为了使用64位浮点值的double
矩阵,需要使用64FC1。
因此,要么将矩阵更改为双精度,要么使用at<float>