OpenCV  4.10.0
开源计算机视觉
正在加载...
正在搜索...
无匹配项
直方图 - 3:直方图反投影

目标

  • 我们将了解直方图反投影。

理论

Michael J. Swain,Dana H. Ballard在其论文通过颜色直方图编制索引中提出。

用简单的语言来说它实际上是什么?它用于图像分割或在图像中寻找感兴趣的对象。简而言之,它创建了一幅与输入图像大小相同(但单通道)的图像,其中每个像素对应于该像素属于我们对象的概率。用更简单的话来说,输出图像中,我们感兴趣的对象将比其他部分更白。当然,这是一个直观的解释。(我无法让它变得更简单)。直方图反投影与 CamShift 算法等结合使用。

我们如何做到这一点?我们创建一个包含我们感兴趣对象的图像的直方图(在我们的例子中,地面留给玩家和其他事物)。为了获得更好的结果,对象应尽可能填充图像。而且,彩色直方图优于灰度直方图,因为对象的彩色比其灰度强度更能定义对象。然后,我们将此直方图“反投影”到我们需要找到对象的测试图像上,换句话说,我们计算每个像素属于地面的概率并显示它。在适当的阈值化上产生的输出结果只有地面。

在 OpenCV 中反投影

我们使用这些函数:cv.calcBackProject(图像,通道,直方图,目标,范围,比例)

参数
图像源阵列。它们都应具有相同的深度,cv.CV_8U,cv.CV_16U 或 cv.CV_32F,并且大小相同。它们每个人都可以有任意数量的通道。
通道用于计算反投影的通道列表。通道的数量必须与直方图维数相匹配。
直方图输入直方图,可以是稠密的或稀疏的。
目标目标反投影阵列,它是与 images[0] 相同大小和深度但单通道的阵列。
范围每个维度的直方图箱界限的阵列(参见 cv.calcHist)。
比例输出反投影的可选比例因子。

cv.normalize (src, dst, alpha = 1, beta = 0, norm_type = cv.NORM_L2, dtype = -1, mask = new cv.Mat())

参数
src输入数组。
目标与 src 大小相同的输出数组。
alpha要标准化的范数值,或者在范围标准化中是下限范围。
beta在范围标准化中是上限范围;在范数标准化中不使用。
norm_type标准化类型(参见 cv.NormTypes)。
dtype为负值时,输出数组的类型与 src 相同;否则,输出数组的通道数与 src 相同,并且深度 = CV_MAT_DEPTH(dtype)
mask可选的操作掩码。

尝试一下