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正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
python多线程实现TCP服务端
Sep 03 Python
python命令 -u参数用法解析
Oct 24 Python
python通过移动端访问查看电脑界面
Jan 06 Python
python 爬虫网页登陆的简单实现
Nov 30 Python
python开发实时可视化仪表盘的示例
May 07 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 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函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
python图像处理之镜像实现方法
2015/05/30 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python实现数据分析与建模
2019/07/11 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python对wav文件的重采样实例
2020/02/25 Python
浅谈Python协程
2020/06/17 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
工作时间上网检讨书
2014/02/03 职场文书
文明城市创建标语
2014/06/16 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
信访稳定工作汇报
2014/10/27 职场文书
大学生见习报告范文
2014/11/03 职场文书
现役军人家属慰问信
2015/03/24 职场文书
如何写新闻稿
2015/07/18 职场文书