【问题标题】:Get value from OpenCV Mat从 OpenCV Mat 中获取价值
【发布时间】: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&lt;float&gt;
  • 谢谢你,这对我有帮助,你能发布答案并解释 32 位和 64 位架构吗?我的错误是,我发现 flat 是 4 位。我应该更加小心互联网资源。

标签: c++ opencv matrix double


【解决方案1】:

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

所以,要么将矩阵更改为双精度数,要么使用at&lt;float&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多