官网参见 https://docs.opencv.org/3.4.1/dc/df6/tutorial_py_histogram_backprojection.html
直方图反向投影是由Michael J. Swain和Dana H. Ballard在《Indexing via color histograms》中提出的。
那么它是什么呢?它被用于图像分割或者找到图像中感兴趣的部分。
简单来说,它会输出和输入图像同样大小的图像(单通道)。输出图像上的每个像素表示输入图像上对应像素属于目标对象的概率。
再简单一点说,输出图像上,我们感兴趣目标对象会比其他部分更加白。这是一个非常直观的解释。
直方图投影通常和camshift算法一起使用。
那么如何实现反向投影呢?
我们为包含感兴趣对象的图像创建直方图。为了获得更好的结果,对象最好能尽量占满整个图像。直方图最好使用颜色直方图,而不是灰度直方图,因为物体的颜色比物体的灰度能更好的定义物体。
然后我们把直方图反向投影到我们的输入图像中,用于找到我们的目标。这个过程总结一下,我们先计算输入图像中的每一个像素点的像素值在直方图中对应的概率,这样可以得到一个概率图像,然后通过设置阈值,把我们感兴趣的目标最终从概率图像中显示出来。
以上解释看得不是很明白。看下面实现过程可以很好理解。
1.numpy中的算法
step1.
首先我们需要计算2个图像的颜色直方图,目标图像的直方图(M),输入图像的直方图(I)
在一堆玫瑰中找到红玫瑰
import numpy as np
import cv2 as cvfrom matplotlib import pyplot as plt
#目标图像-红玫瑰
#roi is the o