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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
使用graphics.py实现2048小游戏
Mar 10 Python
Python读写配置文件的方法
Jun 03 Python
Python 内置函数complex详解
Oct 23 Python
Python3 socket同步通信简单示例
Jun 07 Python
pandas object格式转float64格式的方法
Apr 10 Python
Python实现合并两个列表的方法分析
May 28 Python
python networkx 根据图的权重画图实现
Jul 10 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
Django实现简单的分页功能
Feb 22 Python
浅谈Python数学建模之线性规划
Jun 23 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
example2.php
2006/10/09 PHP
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
javascript连续赋值问题
2015/07/08 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
Python面向对象封装操作案例详解 II
2020/01/02 Python
Python3 assert断言实现原理解析
2020/03/02 Python
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
零件设计自荐信范文
2013/11/27 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
最美乡村教师观后感
2015/06/11 职场文书
旅游投诉信范文
2015/07/02 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server