Python OpenCV处理图像之图像直方图和反向投影


Posted in Python onJuly 10, 2018

本文实例为大家分享了Python OpenCV图像直方图和反向投影的具体代码,供大家参考,具体内容如下

当我们想比较两张图片相似度的时候,可以使用这一节提到的技术

直方图对比

反向投影

关于这两种技术的原理可以参考我上面贴的链接,下面是示例的代码:

0x01. 绘制直方图

import cv2.cv as cv
 
def drawGraph(ar,im, size): #Draw the histogram on the image
  minV, maxV, minloc, maxloc = cv.MinMaxLoc(ar) #Get the min and max value
  hpt = 0.9 * histsize
  for i in range(size):
    intensity = ar[i] * hpt / maxV #Calculate the intensity to make enter in the image
    cv.Line(im, (i,size), (i,int(size-intensity)),cv.Scalar(255,255,255)) #Draw the line
    i += 1
 
#---- Gray image
orig = cv.LoadImage("img/lena.jpg", cv.CV_8U)
 
histsize = 256 #Because we are working on grayscale pictures which values within 0-255
 
hist = cv.CreateHist([histsize], cv.CV_HIST_ARRAY, [[0,histsize]], 1)
 
cv.CalcHist([orig], hist) #Calculate histogram for the given grayscale picture
 
histImg = cv.CreateMat(histsize, histsize, cv.CV_8U) #Image that will contain the graph of the repartition of values
drawGraph(hist.bins, histImg, histsize)
 
cv.ShowImage("Original Image", orig)
cv.ShowImage("Original Histogram", histImg)
#---------------------
 
#---- Equalized image
imEq = cv.CloneImage(orig)
cv.EqualizeHist(imEq, imEq) #Equlize the original image
 
histEq = cv.CreateHist([histsize], cv.CV_HIST_ARRAY, [[0,histsize]], 1)
cv.CalcHist([imEq], histEq) #Calculate histogram for the given grayscale picture
eqImg = cv.CreateMat(histsize, histsize, cv.CV_8U) #Image that will contain the graph of the repartition of values
drawGraph(histEq.bins, eqImg, histsize)
 
cv.ShowImage("Image Equalized", imEq)
cv.ShowImage("Equalized HIstogram", eqImg)
#--------------------------------
 
cv.WaitKey(0)

0x02. 反向投影

import cv2.cv as cv
 
im = cv.LoadImage("img/lena.jpg", cv.CV_8U)
 
cv.SetImageROI(im, (1, 1,30,30))
 
histsize = 256 #Because we are working on grayscale pictures
hist = cv.CreateHist([histsize], cv.CV_HIST_ARRAY, [[0,histsize]], 1)
cv.CalcHist([im], hist)
 
 
cv.NormalizeHist(hist,1) # The factor rescale values by multiplying values by the factor
_,max_value,_,_ = cv.GetMinMaxHistValue(hist)
 
if max_value == 0:
  max_value = 1.0
cv.NormalizeHist(hist,256/max_value)
 
cv.ResetImageROI(im)
 
res = cv.CreateMat(im.height, im.width, cv.CV_8U)
cv.CalcBackProject([im], res, hist)
 
cv.Rectangle(im, (1,1), (30,30), (0,0,255), 2, cv.CV_FILLED)
cv.ShowImage("Original Image", im)
cv.ShowImage("BackProjected", res)
cv.WaitKey(0)

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

Python 相关文章推荐
Python socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
python中split方法用法分析
Apr 17 Python
python获取外网ip地址的方法总结
Jul 02 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Django后台获取前端post上传的文件方法
May 28 Python
Python sorted函数详解(高级篇)
Sep 18 Python
详解Python3中ceil()函数用法
Feb 19 Python
python os模块简单应用示例
May 23 Python
Python实现的爬取豆瓣电影信息功能案例
Sep 15 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python中 map()函数的用法详解
Jul 10 #Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 #Python
Python OpenCV处理图像之图像像素点操作
Jul 10 #Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 #Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 #Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 #Python
python操作excel文件并输出txt文件的实例
Jul 10 #Python
You might like
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
JavaScript代码调试方法实例小结
2019/01/05 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
Python模块学习 filecmp 文件比较
2012/08/27 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
python3转换code128条形码的方法
2019/04/17 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
浅析Python 序列化与反序列化
2020/08/05 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
教师党员承诺书
2014/03/25 职场文书
春风行动实施方案
2014/03/28 职场文书
团队口号大全
2014/06/06 职场文书
文明好少年事迹材料
2014/08/19 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers