从OpenCV Mat获取价值

时间:2016-07-14 08:38:38

标签: c++ opencv matrix double

我的程序中有一个通道矩阵,下一个定义是:

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

1 个答案:

答案 0 :(得分:2)

使用32FC1初始化Mat时,您需要分配32位的单元格,这些单元格由C中的float表示。为了使用64位浮点值的double矩阵,需要使用64FC1。

因此,要么将矩阵更改为双精度,要么使用at<float>