关于C#:从OpenCV Mat获取价值

Get value from OpenCV Mat

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

1
matchingResult.create(result_cols, result_rows, CV_32FC1);

它不是颜色矩阵。
我使用minMaxLoc方法查找最小值和最大值的位置:

1
2
3
4
5
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)的位置或更改最大值来从矩阵中获得相同的值。
如果我尝试获得价值:

1
2
double value = _matchingMap.at<double>(maxLocation);
std::cout<<"Value for"<<maxLocation <<" is"<<value << std::endl;

我会得到一些奇怪的东西:

Value for [4, 2] is -1.08215e+39

我想通过使用行/列坐标更改矩阵中的值,但是我做错了。我找不到错误,也许smb可以告诉我正确的方法。

如何迭代我在这里看到的矩阵


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

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