【发布时间】:2016-07-14 08:38:38
【问题描述】:
我的程序中有一个通道矩阵,下一个定义:
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 我会得到相同的结果。
但我无法通过使用最大值 (maxLocation) 的位置或更改最大值的值从矩阵中获取相同的值。
如果我试图获得价值:
double value = _matchingMap.at<double>(maxLocation);
std::cout<<"Value for "<<maxLocation << " is "<<value << std::endl;
我会得到一些奇怪的东西:
[4, 2] 的值为 -1.08215e+39
我想通过使用行/coll 坐标来更改矩阵中的值,但我做错了。我找不到错误,也许 smb 可以告诉我正确的方法。
如何迭代我见过的矩阵here
【问题讨论】:
-
你的矩阵是32FC1,所以需要使用
at<float> -
谢谢你,这对我有帮助,你能发布答案并解释 32 位和 64 位架构吗?我的错误是,我发现 flat 是 4 位。我应该更加小心互联网资源。