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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
python获取指定目录下所有文件名列表的方法
May 20 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
python实现单机五子棋
Aug 28 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 Python
python脚本框架webpy模板控制结构
Nov 20 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
python实现简单的购物程序代码实例
2020/03/03 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
捐款倡议书范文
2014/02/02 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle