【问题标题】:How to count zero pixels between consecutive non-zero ones in OpenCV?如何计算 OpenCV 中连续非零像素之间的零像素?
【发布时间】:2015-02-09 17:25:40
【问题描述】:

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

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

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

【问题讨论】:

  • 我不确定你的意思是第二点是 (30,23) 我可能是错的
  • 取决于您对“连续非零像素之间的像素数”的定义...您想对该值做什么,或者该值的含义是什么?...更高效的是先在单行内计数(因为 Mat 内存布局的缓存)

标签: c++ image opencv image-processing


【解决方案1】:

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

【讨论】:

  • 我在文档上看到它是用于8位3通道图像的,那么用于单通道灰度图像是否也正确?
  • 我认为它应该可以工作,只是it 将指向uchar 像素而不是cv::Vec3b
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2011-12-18
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多