如何计算 OpenCV 中连续非零像素之间的零像素?

How to count zero pixels between consecutive non-zero ones in OpenCV?

我使用 OpenCV 中的这行代码从灰度图像获得了它的非零像素坐标:

cv::Mat nonZeroCoordinates;
cv::findNonZero(image, nonZeroCoordinates);

现在,我想计算image中两个连续的非零元素之间的零像素。但是我应该先浏览列还是行?例如,如果我在 40x40 垫子的点 (30, 20) 和 (30, 23) 处有非零像素,并且在列之间移动会给我 2 个零像素,而在行中移动会给我 (39-30 ) + 40 + 40 + 29 = 118 像素。我应该通过哪种方式正确计算这些像素?有没有比嵌套循环更好的方法来达到这个目的?谢谢你。

我认为你应该在端点上画一条线并计算它下面的零像素。 OpenCV 有一个 LineIterator class ,您可以从 (30, 20) 到 (30, 23) 创建一条 8 连接或 4 连接的线并检查值。