Python Opencv中用compareHist函数进行直方图比较对比图片


Posted in Python onApril 07, 2020

图像直方图

图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。在实际工程中,图像直方图在特征提取、图像匹配等方面都有很好的应用。

直方图比较

1. 图像相似度比较

如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。

2. 分析图像之间关系

两张图像的直方图反映了该图像像素的分布情况,可以利用图像的直方图,来分析两张图像的关系。

直方图比较函数

cv2.compareHist(H1, H2, method)

其中:

  • H1,H2 分别为要比较图像的直方图
  • method - 比较方式

比较方式(method)

  • 相关性比较 (method=cv.HISTCMP_CORREL) 值越大,相关度越高,最大值为1,最小值为0
  • 卡方比较(method=cv.HISTCMP_CHISQR 值越小,相关度越高,最大值无上界,最小值0
  • 巴氏距离比较(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相关度越高,最大值为1,最小值为0

代码实现

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def create_rgb_hist(image):
 """"创建 RGB 三通道直方图(直方图矩阵)"""
 h, w, c = image.shape
 # 创建一个(16*16*16,1)的初始矩阵,作为直方图矩阵 
 # 16*16*16的意思为三通道每通道有16个bins
 rgbhist = np.zeros([16 * 16 * 16, 1], np.float32)
 bsize = 256 / 16
 for row in range(h):
  for col in range(w):
   b = image[row, col, 0]
   g = image[row, col, 1]
   r = image[row, col, 2]
   # 人为构建直方图矩阵的索引,该索引是通过每一个像素点的三通道值进行构建
   index = int(b / bsize) * 16 * 16 + int(g / bsize) * 16 + int(r / bsize)
   # 该处形成的矩阵即为直方图矩阵
   rgbhist[int(index), 0] += 1
 plt.ylim([0, 10000])
 plt.grid(color='r', linestyle='--', linewidth=0.5, alpha=0.3)
 return rgbhist
def hist_compare(image1, image2):
 """直方图比较函数"""
 # 创建第一幅图的rgb三通道直方图(直方图矩阵)
 hist1 = create_rgb_hist(image1)
 # 创建第二幅图的rgb三通道直方图(直方图矩阵)
 hist2 = create_rgb_hist(image2)
 # 进行三种方式的直方图比较
 match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
 match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
 match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
 print("巴氏距离:%s, 相关性:%s, 卡方:%s" %(match1, match2, match3))
src1 = cv.imread("diff1.PNG")
cv.imshow("diff1", src1)
src2 = cv.imread("diff2.PNG")
cv.imshow("diff2", src2)
plt.subplot(1,2,1)
plt.title("diff1")
plt.plot(create_rgb_hist(src1))
plt.subplot(1,2,2)
plt.title("diff2")
plt.plot(create_rgb_hist(src2))
hist_compare(src1, src2)
plt.show()
cv.waitKey(0)
cv.destroyAllWindows()

Python Opencv中用compareHist函数进行直方图比较对比图片

Python Opencv中用compareHist函数进行直方图比较对比图片

巴氏距离:0.3116175231543461, 相关性:0.8805851455583134,
卡方:154379.82963705878

从计算得到的三个比较值可以发现巴氏距离较低,相关性较高,可以简单认为这两幅图的相似度比较大。

例如下面两幅图

Python Opencv中用compareHist函数进行直方图比较对比图片

Python Opencv中用compareHist函数进行直方图比较对比图片

巴氏距离:0.8939676325760126, 相关性:0.03202528698270991,
卡方:503948.24201884575

从计算得到的三个比较值可以发现巴氏距离很高,相关性系数很低,可以简单认为这两幅图的相似度非常小。

总结

到此这篇关于Python Opencv中用compareHist函数进行直方图比较进行对比图片的文章就介绍到这了,更多相关python Opencv compareHist函数直方图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的super用法详解
May 28 Python
Python 字典与字符串的互转实例
Jan 13 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
FFrpc python客户端lib使用解析
Aug 24 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
python实现感知机模型的示例
Sep 30 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
详解Python中的Lock和Rlock
Jan 26 Python
OpenCV实现常见的四种图像几何变换
Apr 01 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 #Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 #Python
Pytest框架之fixture的详细使用教程
Apr 07 #Python
4行Python代码生成图像验证码(2种)
Apr 07 #Python
Django media static外部访问Django中的图片设置教程
Apr 07 #Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 #Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 #Python
You might like
php小偷相关截取函数备忘
2010/11/28 PHP
javascript event 事件解析
2011/01/31 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
师范生自荐信范文
2013/10/06 职场文书
新学期家长寄语
2014/01/19 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
高中生毕业评语
2014/12/30 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书