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内置函数之filter map reduce介绍
Nov 30 Python
分析python切片原理和方法
Dec 19 Python
python实现SOM算法
Feb 23 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
python lxml中etree的简单应用
May 10 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
Python字典的基础操作
Nov 01 Python
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
星际争霸任务指南——虫族
2020/03/04 星际争霸
php 获得汉字拼音首字母的函数
2009/08/01 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
PHP实现合并discuz用户
2015/08/05 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
javascript学习之json入门
2016/12/22 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
半年思想汇报
2013/12/30 职场文书
学生爱国演讲稿
2014/01/14 职场文书
优秀企业获奖感言
2014/02/01 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
特此通知格式
2015/04/27 职场文书
安全教育的主题班会
2015/08/13 职场文书
MySQL触发器的使用
2021/05/24 MySQL
java版 简单三子棋游戏
2022/05/04 Java/Android