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压缩和解压缩zip文件的教程
May 06 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
Python中psutil的介绍与用法
May 02 Python
对pyqt5中QTabWidget的相关操作详解
Jun 21 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP查询分页的实现代码
2017/06/09 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Python库urllib与urllib2主要区别分析
2014/07/13 Python
Python argv用法详解
2016/01/08 Python
python基础之入门必看操作
2017/07/26 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
优秀技术工人先进材料
2014/02/17 职场文书
毕业生应聘求职信
2014/07/10 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
公司开会通知
2015/04/20 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL