【发布时间】:2013-02-20 05:12:38
【问题描述】:
如何找到二值图像 (cv::Mat) 中所有非零像素的位置?我是否必须扫描图像中的每个像素,或者是否有可以使用的高级 OpenCV 函数?输出应该是一个点向量(像素位置)。
例如,这可以在 Matlab 中简单地完成:
imstats = regionprops(binary_image, 'PixelList');
locations = imstats.PixelList;
或者,甚至更简单
[x, y] = find(binary_image);
locations = [x, y];
编辑:也就是说,如何找到cv::Mat中所有非零元素的坐标?
【问题讨论】:
-
你用的是哪个版本的opencv?在 2.4.4 python 版本中,我可以找到一个类似的函数“cv2.findNonzero”,这意味着它也应该存在于 C++ 中。但它不在文档中。所以安装 2.4.4 并检查该功能。
-
谢谢,我的 OpenCV 版本 2.4.2 (C++) 中没有 cv::findNonzero。
-
我认为它来自 2.4.4。我从 2.4.4 python 版本得到它。所以如果你想使用它,你可以更新到 2.4.4
-
我可以试试,奇怪的是它没有记录在案
-
已安装版本 2.4.4。确实有一个 C++ 函数
cv::findNonZero可以完全满足要求。这个功能只有2.4.4版本才有,在opencv的早期版本中是没有的。 @AbidRahmanK 您可以将您的评论作为答案。谢谢!