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

下面是详细的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 tkinter 图片插入问题

    本文主要介绍如何使用Python的Tkinter库插入图片,包含导入图片、缩放图片、调整图片大小以及将图片插入到Tkinter窗口等操作。 导入图片 使用PIL库(Python Imaging Library)里的Image模块,可以很简单地导入图片。 from PIL import ImageTk, Image img = Image.open(&quot…

    python 2023年6月13日
    00
  • python求绝对值的三种方法小结

    下面是针对“python求绝对值的三种方法小结”的详细讲解攻略: 1.方法一:使用内置函数abs() Python内置函数abs()用于求取数字的绝对值,参数为数字。下面是使用这种方法的示例代码: num1 = -5 num2 = 12 print(abs(num1)) # 执行后输出:5 print(abs(num2)) # 执行后输出:12 2.方法二:…

    python 2023年6月3日
    00
  • 对Python 多线程统计所有csv文件的行数方法详解

    让我给你详细讲解一下Python多线程统计所有csv文件的行数方法详解的完整攻略。 问题描述 我们需要统计一组CSV文件中所有文件的行数。为了提高效率,我们需要使用多线程处理。 解决方案 步骤1:导入必要的库 我们需要使用Python标准库中的os和csv模块,以及threading模块。 import os import csv import thread…

    python 2023年5月19日
    00
  • Python详解argparse参数模块之命令行参数

    Python中,argparse是一个标准库,旨在帮助开发者编写易于使用和可自动化的命令行界面。在本文中,我们将深入介绍argparse参数模块之命令行参数的详细攻略。 argparse参数模块简介 argparse模块是Python程序设计的一个标准库。argparse模块用于解析命令行参数。argparse模块使得编写用户友好的命令行界面易如反掌。 ar…

    python 2023年6月3日
    00
  • python 实现PIL模块在图片画线写字

    如果要在Python中对图片进行处理,常用的模块是Python Imaging Library (PIL)。PIL提供了很多操作图片的方法,包括在图片上描绘线条和文字。 在Python中实现PIL模块在图片画线写字需要安装PIL模块。可以用pip指令安装:pip install Pillow,或者直接从官网下载安装包手动安装。 接下来,我们来讲两个示例来说明…

    python 2023年5月13日
    00
  • Python3列表内置方法大全及示例代码小结

    下面我将详细讲解“Python3列表内置方法大全及示例代码小结”的完整攻略。 Python3列表内置方法大全及示例代码小结 一、列表的数据结构 在 Python3 中,列表(List)是一种可变容器,可按照任意顺序存储同一种数据类型的元素。在 Python 中,列表是用方括号 [] 包含一系列逗号分隔的值来表示。例如: fruits = [‘apple’, …

    python 2023年5月19日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.9’”怎么处理?

    当使用 pip 命令时,可能会遇到 “ValueError: invalid literal for int() with base 10: ‘3.9’” 错误。这个错误通常是由于您在使用 pip 命令时输入了无效的参数或选项导致的。以下是详细讲解 pip 报错 “ValueError: invalid literal for int() with base…

    python 2023年5月4日
    00
  • sklearn的predict_proba使用说明

    sklearn是Python中机器学习最为流行的库之一,其中的predict_proba方法是用于预测概率的方法。本文将详细讲解predict_proba的使用说明。 predict_proba方法用途 predict_proba方法用于预测分类器预测输入属于每个类别的概率。对于每个输入,predict_proba方法返回一个概率数组,其中每个元素表示输入属…

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