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执行时间的计算方法小结
Mar 17 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
python异步编程 使用yield from过程解析
Sep 25 Python
TensorFlow实现指数衰减学习率的方法
Feb 05 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
Django多个app urls配置代码实例
Nov 26 Python
python基础之类属性和实例属性
Oct 24 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 数组基础知识小结
2010/08/20 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Python3实现购物车功能
2018/04/18 Python
Python装饰器用法实例总结
2018/05/26 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
期末自我鉴定
2014/01/23 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
初一新生军训方案
2014/05/22 职场文书
公司合并协议书范本
2014/09/30 职场文书
投诉书格式范本
2015/07/02 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB