opencv 直方图反向投影

时间:2023-01-09 23:29:08

       直方图反向投影式通过给定的直方图信息,在图像找到相应的像素分布区域,opencv提供两种算法,一个是基于像素的,一个是基于块的。

使用方法不写了,可以参考一下几个网站:

直方图反向投影参考1

直方图参考2

 

测试例子1:灰度直方图反向投影

opencv 直方图反向投影opencv 直方图反向投影
灰度直方图反向投影

效果图:

 opencv 直方图反向投影
第一个图为源图像,中间的那个小图像是产生用于反向投影的直方图的图像,最后的用直方图均衡化后的结果图像,可以看到,苹果的像素位置几被找到了。

 

测试例子2:彩色直方图反向投影测试

opencv 直方图反向投影opencv 直方图反向投影
彩色图像直方图反向投影

测试结果:

 opencv 直方图反向投影

手的肤色位置基本找到了,但是有一个问题,在做直方图反向的时候,直方图分级是16等分,并不是256等分,下图是32等分和8等分的图像效果:

opencv 直方图反向投影      32等分 opencv 直方图反向投影 8等分

程序里面使用了SHV分量,也算是肤色检测的一个实例,里面的颜色区分很明显,所有采用大一点的区域统计,能更好的找到肤色的位置,如果采用很细的颜色区分,光照的影响也会考虑进去了。

测试例子3:基于块的直方图投影

这种方法速度很慢,模版图像别弄的太大了。

opencv 直方图反向投影opencv 直方图反向投影
基于块的图像直方图反向投影


测试图像:

当模版图像小雨目标的时候,作为区域检测器,测试如下:可以找到手区域

opencv 直方图反向投影

当模版等于目标的时候,测试如下:输出图像,较亮的部分就是人的头部大致位置

opencv 直方图反向投影

基于块的反向,速度太慢了。