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的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
django2.0扩展用户字段示例
Feb 13 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python中time库的实例使用方法
Oct 31 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 Python
python实现引用其他路径包里面的模块
Mar 09 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python  word实现读取及导出代码解析
Jul 09 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 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中变量及部分适用方法
2008/03/27 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
yii分页组件用法实例分析
2015/12/28 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
javascript轮播图算法
2016/10/21 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python实现12306火车票查询器
2017/04/20 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python Gitlab Api 使用方法
2019/08/28 Python
python selenium操作cookie的实现
2020/03/18 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
委托公证书范本
2014/04/03 职场文书
我的长生果教学反思
2014/04/28 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2015年党员自评材料
2014/12/17 职场文书
寒山寺导游词
2015/02/03 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
MSSQL基本语法操作
2022/04/11 SQL Server
PYTHON InceptionV3模型的复现详解
2022/05/06 Python