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创建XML文档
Mar 01 Python
从零学python系列之数据处理编程实例(一)
May 22 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
python fabric实现远程部署
Jan 05 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
python装饰器相当于函数的调用方式
Dec 27 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
django日志默认打印request请求信息的方法示例
May 17 Python
Pycharm plot独立窗口显示的操作
Dec 11 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作的文本留言本的例子(二)
2006/10/09 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
详解express与koa中间件模式对比
2017/08/07 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
Vue 数据响应式相关总结
2021/01/28 Vue.js
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
pycharm 使用心得(四)显示行号
2014/06/05 Python
详解Python中的多线程编程
2015/04/09 Python
Python socket处理client连接过程解析
2020/03/18 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
仓库管理制度
2014/01/21 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2014年共青团工作总结
2014/12/10 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
教师教育心得体会
2016/01/19 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
Python作用域和名称空间的详细介绍
2022/04/13 Python