python opencv 直方图反向投影的方法


Posted in Python onFebruary 24, 2018

本文介绍了python opencv 直方图反向投影的方法,分享给大家,具体如下:

目标:

直方图反向投影

原理:

反向投影可以用来做图像分割,寻找感兴趣区间。它会输出与输入图像大小相同的图像,每一个像素值代表了输入图像上对应点属于目标对象的概率,简言之,输出图像中像素值越高的点越可能代表想要查找的目标。直方图投影经常与camshift(追踪算法)算法一起使用。

算法实现的方法,首先要为包含我们感兴趣区域的图像建立直方图(样例要找一片草坪,其他的不要)。被查找的对象最好是占据整个图像(图像里全是草坪)。最好使用颜色直方图,物体的颜色信息比灰度图像更容易被分割和识别。再将颜色直方图投影到输入图像查找目标,也就是找到输入图像中每一个像素点的像素值在直方图中对应的概率,这样就得到一个概率图像,最后设置适当的阈值对概率图像进行二值化。

numpy算法:

建立两幅颜色直方图,目标图像直方图(M),输入图像直方图(I)

import cv2
import numpy as np
from matplotlib import pyplot as plt
#roi图片,就想要找的的图片
roi = cv2.imread('3.jpg')
hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)
#目标搜索图片
target = cv2.imread('33.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)
#创建直方图
M = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
I = cv2.calcHist([hsvt],[0,1],None,[180,256],[0,180,0,256])

计算比值:R=MI。反向投影R,根据R这个调色板创建新图像,每一个像素代表这个点事目标的概率。例如,B(x,y)=R[h(x,y),s(x,y),其中H为点(x,y)的色调(hue)值,s为点(x,y)的饱和度(saturation)。最后加入条件B(x,y)=min([B(x,y),1]

h,s,v = cv2.split(hsvt)
B = R[h.ravel(),s.ravel()]
B = np.minimum(B,1)
B = B.reshape(hsvt.shape[:2])

使用圆盘算子做卷积,B=D×B,其中D为卷积核

disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))#定义结构形状,5×5的椭圆
B=cv2.filter2D(B,-1,disc)#对图像进行卷积运算
B = np.uint8(B)
cv2.normalize(B,B,0,255,cv2.NORM_MINMAX)

其中函数cv2.getStructuringElement是定义结构元素,例如element = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)) 定义了一个十字形,5×5的结构

python opencv 直方图反向投影的方法 

输出图像中灰度最大的地方就是目标位置。如果要找的是一个区域,可以使用一个阈值对图像二值化,这样能得到不错的结果。

ret,thresh = cv2.threshold(B,50,255,0)

opencv反向投影

函数 cv2.calcBackProject()直接实现反向投影,参数与cv2.calcHist基本一致。其中一个参数是要查找的目标的直方图。在使用目标直方图反向投赢钱应该进行归一化处理。返回结果是一个概率图像,然后进行圆盘形状卷积操作,再二值化。

roi区域图片

python opencv 直方图反向投影的方法 

待搜索图片

python opencv 直方图反向投影的方法 

结果

python opencv 直方图反向投影的方法

import cv2
import numpy as np
from matplotlib import pyplot as plt
#roi图片,就想要找的的图片
roi = cv2.imread('33.jpg')
hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)

#目标搜索图片
target = cv2.imread('3.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)

#计算目标直方图
roihist = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
#归一化,参数为原图像和输出图像,归一化后值全部在2到255范围
cv2.normalize(roihist,roihist,0,255,cv2.NORM_MINMAX)
dst = cv2.calcBackProject([hsvt],[0,1],roihist,[0,180,0,256],1)

#卷积连接分散的点
disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
dst = cv2.filter2D(dst,-1,disc)

ret,thresh = cv2.threshold(dst,50,255,0)
#使用merge变成通道图像
thresh = cv2.merge((thresh,thresh,thresh))

#蒙板
res = cv2.bitwise_and(target,thresh)
#矩阵按列合并,就是把target,thresh和res三个图片横着拼在一起
res = np.hstack((target,thresh,res))

cv2.imwrite('res.jpg',res)
#显示图像
cv2.imshow('1',res)
cv2.waitKey(0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python sys.argv用法实例
May 28 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
Python使用Matlab命令过程解析
Jun 04 Python
Django日志及中间件模块应用案例
Sep 10 Python
Python 实现RSA加解密文本文件
Dec 30 Python
python如何修改文件时间属性
Feb 05 Python
python unittest单元测试的步骤分析
Aug 02 Python
python爬虫爬取淘宝商品信息
Feb 23 #Python
python爬取淘宝商品详情页数据
Feb 23 #Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 #Python
python列表生成式与列表生成器的使用
Feb 23 #Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 #Python
python使用xslt提取网页数据的方法
Feb 23 #Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 #Python
You might like
php str_replace的替换漏洞
2008/03/15 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
python实现石头剪刀布程序
2021/01/20 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
部队领导证婚词
2014/01/12 职场文书
个人简历自我评价
2014/02/02 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
反邪教标语
2014/06/23 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
Golang 链表的学习和使用
2022/04/19 Golang