【发布时间】:2012-01-15 05:46:07
【问题描述】:
我正在尝试计算 OpenCV 二进制图像中的所有白色像素。我目前的代码如下:
whitePixels = 0;
for (int i = 0; i < height; ++i)
for (int j = 0; j < width; ++j)
if (binary.at<int>(i, j) != 0)
++whitePixels;
但是,在使用 gprof 进行分析后,我发现这是一段非常慢的代码,并且是程序中的一大瓶颈。
有没有一种方法可以更快地计算相同的值?
【问题讨论】:
-
您是否尝试更改高度和宽度?我的意思是循环宽度然后高度?这可能会改善循环,这取决于图像在内存中的布局方式。
-
你可以通过这个at()函数直接访问图像数据吗?
-
按照 jrok 的建议做可能会更快。我想知道this faq entry 是否相关。
-
谢谢大家,我认为直接数据访问一定是要走的路。有些事情告诉我,改变循环的顺序也会更快。我试试看。
-
at() 函数在 Debug 模式下非常慢,尽管(几乎)与 Release 中的直接指针访问一样快。它包含一个 CV_DbgAssert() 来检查边界,这是惰性的。
标签: c++ optimization image-processing opencv