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使用urllib2模块获取gravatar头像实例
Dec 18 Python
python实现文件分组复制到不同目录的例子
Jun 04 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
浅析python实现scrapy定时执行爬虫
Mar 04 Python
在django模板中实现超链接配置
Aug 21 Python
Django之路由层的实现
Sep 09 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
如何基于python操作json文件获取内容
Dec 24 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
python Tkinter的简单入门教程
Apr 11 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
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php中的strpos使用示例
2014/02/27 PHP
PHP中的self关键字详解
2019/06/23 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Python机器学习之决策树算法
2017/12/22 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
python下载库的步骤方法
2019/10/12 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
2014学年自我鉴定
2014/02/23 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2019年入党思想汇报
2019/03/25 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js