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中mechanize库的简单使用示例
Jan 10 Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
Python中isnumeric()方法的使用简介
May 19 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
keras topN显示,自编写代码案例
Jul 03 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
python常量折叠基础知识点讲解
Feb 28 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在Web开发领域的优势
2006/10/09 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
php源码的安装方法和实例
2019/09/26 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python中while和for的区别总结
2019/06/28 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
房地产还款计划书
2014/01/10 职场文书
三下乡活动方案
2014/01/31 职场文书
第一书记观后感
2015/06/08 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
Go 语言中 20 个占位符的整理
2021/10/16 Golang