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中的JSON模块
Apr 08 Python
Python中序列的修改、散列与切片详解
Aug 27 Python
对numpy中轴与维度的理解
Apr 18 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
pymysql模块使用简介与示例
Nov 17 Python
神经网络训练采用gpu设置的方式
Mar 03 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版
2012/04/20 PHP
php模板函数 正则实现代码
2012/10/15 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
destoon二次开发入门示例
2014/06/20 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
python处理按钮消息的实例详解
2017/07/11 Python
Python MD5加密实例详解
2017/08/02 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python判断自身是否正在运行的方法
2019/08/08 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
Python 下载及安装详细步骤
2019/11/04 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
函授毕业自我鉴定
2013/12/19 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
五年级学生期末评语
2014/12/26 职场文书
信访工作个人总结
2015/03/03 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
2015年科普工作总结
2015/07/23 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫