如何使用每第n个像素opencv计算直方图

时间:2015-04-22 05:27:45

标签: c++ opencv image-processing histogram

我使用这个opencv函数来计算直方图(蓝色)。

calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );

这里我们使用图像中的所有像素来计算直方图。假设我需要使用每10个像素或第100个像素计算直方图。有没有一种有效的方法来做到这一点?我需要这样做,因为我认为它可能会增加直方图计算的性能,即使有些细节已经丢失。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用cv::resize()与最近邻居“插值”沿两个轴每10个像素对图像进行子采样。然后计算子采样图像上的直方图。

除了使用额外的1%内存(超出您的图像),它应该与在运行中计算直方图一样有效。

答案 1 :(得分:1)

计算时间与像素数成线性关系。你基本上把每个像素一次放入一个箱子里。提前对它们进行任何转换将导致节省时间。

因此,像调整大小或创建新图像这样的事情会破坏目的。

实现任何节省的最佳方法是使用自己的直方图计算功能,只需在迭代像素时将索引增加(10,100或1000)。直方图算法很容易重写。这是本科生的典型作业问题。

我认为在少数情况下,通过使用较少像素的直方图来节省时间是值得的。您必须处理非常紧迫的时间限制或非常大的数据。