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设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
python多进程间通信代码实例
Sep 30 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
python操作redis数据库的三种方法
Sep 10 Python
解决python3输入的坑——input()
Dec 05 Python
Python中快速掌握Data Frame的常用操作
Mar 31 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与XML的PDF文档生成技术
2006/10/09 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
react redux入门示例
2018/04/19 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
毕业求职自荐信格式是什么
2013/11/19 职场文书
财产公证书样本
2014/04/04 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
作文之亲情600字
2019/09/23 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
python 实现的截屏工具
2021/05/08 Python
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
利用Python实现模拟登录知乎
2022/05/25 Python
hive数据仓库新增字段方法
2022/06/25 数据库