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 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
PyQt5固定窗口大小的方法
Jun 18 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
python django 原生sql 获取数据的例子
Aug 14 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
python中shell执行知识点
May 06 Python
Python自动化操作实现图例绘制
Jul 09 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
pycharm 安装JPype的教程
2019/08/08 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
绩效工资分配方案
2014/01/18 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL