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 getopt模块处理命令行选项实例
May 13 Python
Python实现简单的可逆加密程序实例
Mar 05 Python
python 读写中文json的实例详解
Oct 29 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python3转换code128条形码的方法
Apr 17 Python
python可视化爬虫界面之天气查询
Jul 03 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python之django路由和视图案例教程
Jul 26 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
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
python快速排序代码实例
2013/11/21 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
为什么要用EJB
2014/04/17 面试题
安全在我心中演讲稿
2014/09/01 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
2014年安全员工作总结
2014/11/13 职场文书
工程移交协议书
2016/03/24 职场文书
python小程序之飘落的银杏
2021/04/17 Python