gpt4 book ai didi

c++ - OpenCV - 二值图像中所有非零像素的位置

转载 作者:可可西里 更新时间:2023-11-01 14:56:01 27 4
gpt4 key购买 nike

如何找到二进制图像 (cv::Mat) 中所有非零像素的位置?我是否必须扫描图像中的每个像素,或者是否有可以使用的高级 OpenCV 函数?输出应该是点 vector (像素位置)。

例如,这可以在 Matlab 中简单地完成:

imstats = regionprops(binary_image, 'PixelList');
locations = imstats.PixelList;

或者,更简单

[x, y] = find(binary_image);
locations = [x, y];

编辑:换句话说,如何找到cv::Mat中所有非零元素的坐标?

最佳答案

我将其作为编辑放在 Alex 的回答中,但它没有得到审查,所以我将其发布在这里,因为它是有用的信息恕我直言。

您还可以传递一个点 vector ,这样可以更轻松地对它们进行操作:

std::vector<cv::Point2i> locations;   // output, locations of non-zero pixels 
cv::findNonZero(binaryImage, locations);

关于 cv::findNonZero 函数的一般注意事项:如果 binaryImage 包含零个非零元素,它将抛出,因为它试图分配 '1 x n'内存,其中 n 是 cv::countNonZero,此时 n 显然为 0。我通过事先手动调用 cv::countNonZero 来规避这种情况,但我不太喜欢这种解决方案。

关于c++ - OpenCV - 二值图像中所有非零像素的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15229951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com