我使用这个opencv函数来计算直方图(蓝色)。
calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );
这里我们使用图像中的所有像素来计算直方图。假设我需要使用每10个像素或第100个像素计算直方图。有没有一种有效的方法来做到这一点?我需要这样做,因为我认为它可能会增加直方图计算的性能,即使有些细节已经丢失。
感谢任何帮助。
答案 0 :(得分:1)
使用cv::resize()
与最近邻居“插值”沿两个轴每10个像素对图像进行子采样。然后计算子采样图像上的直方图。
除了使用额外的1%内存(超出您的图像),它应该与在运行中计算直方图一样有效。
答案 1 :(得分:1)
计算时间与像素数成线性关系。你基本上把每个像素一次放入一个箱子里。提前对它们进行任何转换将导致节省时间。
因此,像调整大小或创建新图像这样的事情会破坏目的。
实现任何节省的最佳方法是使用自己的直方图计算功能,只需在迭代像素时将索引增加(10,100或1000)。直方图算法很容易重写。这是本科生的典型作业问题。
我认为在少数情况下,通过使用较少像素的直方图来节省时间是值得的。您必须处理非常紧迫的时间限制或非常大的数据。