【发布时间】: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 > 1) {cout << stats.at<int>(1,0);} -
第一行是背景,标签总是0,顺便说一句:D
-
哈哈是的,我现在明白了,我不敢相信这让我困惑了这么久。非常感谢您的帮助!
标签: c++ opencv opencv3.0 connected-components