Python Opencv中用compareHist函数进行直方图比较对比图片

yizhihongxing

下面是详细的Python Opencv中用compareHist函数进行直方图比较对比图片的攻略,包括两个示例。

前提条件

在使用compareHist函数进行直方图比较前,需要先了解以下基本概念:

  • 直方图:描述图像的像素值分布情况的统计方法,由若干个像素值范围组成的区间(也称为“箱子”)和落入每个区间内的像素数或像素比例(也称为“项”)构成。

  • 直方图特征向量:描述一张图像的直方图信息所构成的向量。

  • 直方图相似度度量:比较两个直方图特征向量的相似度方法。

compareHist函数的详细说明

compareHist函数用于比较两个直方图特征向量的相似度,函数原型如下:

cv2.compareHist(H1, H2, method)

其中,H1和H2为要进行对比的两个直方图特征向量,method为直方图相似度度量方法。

常用的method参数值有以下几种:

  • cv2.HISTCMP_CORREL:相关性比较法,取值范围为[-1,1],值越大表示越相似(1表示完全相似,0表示不相关,-1表示完全相反)。

  • cv2.HISTCMP_CHISQR:卡方比较法,取值范围为[0, +∞),值越小表示越相似。

  • cv2.HISTCMP_INTERSECT:交集比较法,取值范围为[0,1],值越大表示越相似(1表示完全相同)。

  • cv2.HISTCMP_BHATTACHARYYA:巴氏距离比较法,取值范围为[0,1],值越小表示越相似。

示例1:比较两张图片的直方图相似度

下面是一个示例,演示如何用compareHist函数比较两张图片的直方图相似度。

import cv2 

img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

# 将图片转换成灰度图
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# 计算直方图
hist1 = cv2.calcHist([gray1],[0],None,[256],[0,256])
hist2 = cv2.calcHist([gray2],[0],None,[256],[0,256])

# 进行直方图比较
corr = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
chisqr = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CHISQR)
intersect = cv2.compareHist(hist1, hist2, cv2.HISTCMP_INTERSECT)
bhattacharya = cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)

# 输出相似度结果
print('相关性:', corr)
print('卡方距离:', chisqr)
print('交集:', intersect)
print('巴氏距离:', bhattacharya)

需要先将两张图片转换成灰度图,然后用cv2.calcHist函数计算出直方图特征向量,最后用cv2.compareHist函数比较两个直方图的相似度。

示例2:比较两张图片多通道的直方图相似度

如果要比较的图片是彩色图片,可以考虑使用多通道的直方图特征向量进行比较。下面是一个示例,演示如何比较两张图片多通道的直方图相似度。

import cv2

img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

# 计算RGB三个通道的直方图
hist1_r = cv2.calcHist([img1],[0],None,[256],[0,256])
hist1_g = cv2.calcHist([img1],[1],None,[256],[0,256])
hist1_b = cv2.calcHist([img1],[2],None,[256],[0,256])
hist1 = cv2.merge([hist1_r, hist1_g, hist1_b])

hist2_r = cv2.calcHist([img2],[0],None,[256],[0,256])
hist2_g = cv2.calcHist([img2],[1],None,[256],[0,256])
hist2_b = cv2.calcHist([img2],[2],None,[256],[0,256])
hist2 = cv2.merge([hist2_r, hist2_g, hist2_b])

# 进行直方图比较
corr = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CORREL)
chisqr = cv2.compareHist(hist1, hist2, cv2.HISTCMP_CHISQR)
intersect = cv2.compareHist(hist1, hist2, cv2.HISTCMP_INTERSECT)
bhattacharya = cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)

# 输出相似度结果
print('相关性:', corr)
print('卡方距离:', chisqr)
print('交集:', intersect)
print('巴氏距离:', bhattacharya)

这个示例中,需要计算RGB三个通道的直方图特征向量,然后用cv2.merge函数将三个通道合并成一个多通道的直方图特征向量,最后用cv2.compareHist函数比较两个多通道直方图的相似度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Opencv中用compareHist函数进行直方图比较对比图片 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python unittest生成测试报告过程解析

    Python unittest生成测试报告过程解析 Python unittest是Python自带的单元测试框架,可以用于编写和运行单元测试。在实际应用中,我们通常需要生成测试报告,以便更好地了解测试结果和问题。本文将详细讲解Python unittest生成测试报告的过程和方法。 安装HTMLTestRunner HTMLTestRunner是Pytho…

    python 2023年5月15日
    00
  • 正则表达式教程之重复匹配详解

    下面是详细的攻略: 正则表达式教程之重复匹配详解 正则表达式中的重复匹配指的是匹配重复出现的字符或字符集。在本文中,我们将介绍正则表达式中的重复匹配语法和示例。 重复匹配语法 正则表达式中的重复匹配语法包括以下元字符: *:匹配前面的字符零次或多次。 +:匹配前面的字符一次或多次。 ?:匹配前面的字符零次或一次。 {n}:匹配前面的字符恰好n次。 {n,}:…

    python 2023年5月14日
    00
  • 基于Python制作一键桌面整理工具

    下面详细讲解一下基于Python制作一键桌面整理工具的完整攻略。 1. 定义需求 首先,我们需要明确这个工具的功能需求。假设我们的需求如下: 整理桌面上的文件夹和快捷方式,将其按照类型分类并放入相应的文件夹中。 文件分类的几个类别为文档、图片、音乐、视频和其他。 工具需要自动创建这些分类的文件夹,并将文件按照类型放入合适的文件夹中。 工具需要处理桌面上所有文…

    python 2023年6月3日
    00
  • 使用python切片实现二维数组复制示例

    使用python切片(slice)实现二维数组复制是一个非常实用的技巧,下面我将详细讲解如何进行操作。 步骤1: 创建原始二维数组 首先,我们需要创建一个原始的二维数组,假设我们要复制的二维数组如下: arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 步骤2:使用切片复制二维数组 在Python中,可以使用切片(slice)来复…

    python 2023年6月6日
    00
  • python批量读取txt文件为DataFrame的方法

    下面是“python批量读取txt文件为DataFrame的方法”的完整攻略,包括以下步骤: 步骤一:准备数据 首先需要获得一些示例数据,这些示例数据应该存在于多个.txt文件中。这些文件应该具有相同的格式,可以包含标头和数据,以制表符或其他分隔符分隔。 步骤二:导入必要的库 在使用本方法之前,需要导入pandas库。可以使用以下命令导入pandas: im…

    python 2023年6月2日
    00
  • Python实现抓取HTML网页并以PDF文件形式保存的方法

    Python实现抓取HTML网页并以PDF文件形式保存的方法 在本文中,我们将介绍如何使用Python抓取HTML网页并将其保存为PDF文件。我们将使用requests库和pdfkit库来抓取和转换HTML网页,使用wkhtmltopdf工具将HTML网页转换为PDF文件。以下是详细的步骤和示例。 步骤1:安装必要的库和工具 在使用Python抓取和转换HT…

    python 2023年5月15日
    00
  • Python搭建Gitee图床的示例代码

    下面具体讲解一下Python搭建Gitee图床的示例代码的完整攻略,包含以下几个步骤: 步骤一:创建Gitee账号和仓库 在Gitee官网上注册账号并登录,然后创建一个新的仓库,用于存放我们将要上传的图片。记住仓库地址、用户名和密码,后面要用到。 步骤二:安装Python及必要的第三方库 如果你还没有安装Python,需要先去官网下载并安装Python3,然…

    python 2023年6月2日
    00
  • python用Tkinter做自己的中文代码编辑器

    下面我将详细讲解“python用Tkinter做自己的中文代码编辑器”的完整攻略。 一、Tkinter介绍 Tkinter是Python自带的GUI库,它提供了显示GUI界面所需要的各种组件。使用Tkinter编写代码的好处是它可以轻松跨平台运行,无需额外的安装。 二、制作自己的中文代码编辑器 制作一个自己的中文代码编辑器需要使用Tkinter的一些组件: …

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部