【问题标题】:Connected components accessing matrix values连接组件访问矩阵值
【发布时间】:2015-12-22 01:07:17
【问题描述】:

我正在尝试根据其位置对视频中的连接组件进行分类。我正在使用 opencv 3 中的 connectedComponentsWithStats 函数。我试图从 1x5 矩阵的 stats 矩阵中访问值。当我使用以下代码时,我成功访问了连接组件的区域。

connectedComponentsWithStats(median_difference3, labels, stats, centroids, 8, CV_16U);

int area= stats.at<int>(0,4);
cout << area << endl;

当我尝试使用

访问矩阵的第一个值时
int x= stats.at<int>(0,0);

我得到的所有值都是零。

只是为了确认当我输出完整的统计矩阵时,矩阵的 0,0 位置的值并不总是零,因此它们应该以与面积矩阵相同的方式变化。 stat 矩阵中的值也总是整数。

如果您能看到我做错了什么,我将不胜感激!

【问题讨论】:

  • 这似乎是正确的。您可以设置一个minimal reproducible example 以便我们重现您的问题吗?
  • 我刚刚意识到当框架中没有连接的组件时是一个 1x5 向量。如果存在矩阵,则为 2 x 5 矩阵,第一行包含默认值,第二行包含有关 CC 的有用信息。这就是为什么我一直得到零的原因。你知道我如何访问矩阵中的第二行,因为并不总是有两行和 stats.at(1, 0);不会工作。
  • if(stats.rows &gt; 1) {cout &lt;&lt; stats.at&lt;int&gt;(1,0);}
  • 第一行是背景,标签总是0,顺便说一句:D
  • 哈哈是的,我现在明白了,我不敢相信这让我困惑了这么久。非常感谢您的帮助!

标签: c++ opencv opencv3.0 connected-components


【解决方案1】:

第一行统计参考背景:

来自doc

statsv – 每个标签的统计输出,包括背景标签

您可以简单地检查stats 的行数以了解您是否有一些前台组件,或者检查connectedComponentsWithStats 返回的标签数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多