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使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
详解Python中的正则表达式
Jul 08 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
详解python持久化文件读写
Apr 06 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
Python如何将字符串转换为日期
Jul 31 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
python 指定源路径来解决import问题的操作
Mar 04 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
php设置页面超时时间解决方法
2015/09/22 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
python实现倒计时小工具
2019/07/29 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
荷兰本土平价百货:HEMA
2017/10/23 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
中学老师的自我评价
2013/11/07 职场文书
户籍证明的格式
2014/01/13 职场文书
幼教简历自我评价
2014/01/28 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
后天观后感
2015/06/08 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
基于Python的EasyGUI学习实践
2021/05/07 Python