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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
python字典键值对的添加和遍历方法
Sep 11 Python
python连接mysql实例分享
Oct 09 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
PYTHON基础-时间日期处理小结
May 05 Python
Numpy之文件存取的示例代码
Aug 03 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
python实现坦克大战
Apr 24 Python
浅谈Python中threading join和setDaemon用法及区别说明
May 02 Python
Python机器学习之基础概述
May 19 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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带节点操作的无限分类实现方法详解
2016/11/09 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Exjs 入门篇
2010/04/07 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
在Django框架中编写Contact表单的教程
2015/07/17 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python交互环境下实现输入代码
2018/06/22 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
如何理解Python中包的引入
2020/05/29 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
网上祭先烈心得体会
2014/09/01 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
争先创优个人总结
2015/03/04 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP