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程序实例(通讯录)
Nov 29 Python
python使用cookielib库示例分享
Mar 03 Python
在Python中移动目录结构的方法
Jan 31 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
python调用java的jar包方法
Dec 15 Python
python networkx 根据图的权重画图实现
Jul 10 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
Python如何进行时间处理
Aug 06 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
基于javascript滚动图片具体实现
2013/11/18 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
详解Python字符串对象的实现
2015/12/24 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
师范大学应届生求职信
2013/11/21 职场文书
银行开业庆典方案
2014/02/06 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
怎么写好自荐书
2014/03/02 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
500字作文之周记
2019/12/13 职场文书