【发布时间】:2013-05-31 12:27:57
【问题描述】:
使用 OpenCV 获取二进制图片中白色像素数量的最快方法是什么?有没有比使用两个 for 循环并逐像素访问图像更快的方法?
【问题讨论】:
-
图像是真灰度还是二值图像?
-
@Aurelius:它实际上是二进制图像,我应该在问题中写出来。
使用 OpenCV 获取二进制图片中白色像素数量的最快方法是什么?有没有比使用两个 for 循环并逐像素访问图像更快的方法?
【问题讨论】:
最简洁的方法是:
cv::Mat image, mask; //image is CV_8UC1
cv::inRange(image, 255, 255, mask);
int count = cv::countNonZero(mask);
如果您对二进制图像进行操作,则无需调用cv::inRange(),只需cv::countNonZero() 就足够了。
尽管任何方法都必须遍历所有像素,但这可能能够利用 OpenCV 的内置 parallel_for_(),它允许并行执行。
如果您的图像是连续的,您可以使用单个循环遍历所有数据。
【讨论】: