下面是详细的Python Opencv中用compareHist函数进行直方图比较对比图片的攻略,包括两个示例。
前提条件
在使用compareHist函数进行直方图比较前,需要先了解以下基本概念:
-
直方图:描述图像的像素值分布情况的统计方法,由若干个像素值范围组成的区间(也称为“箱子”)和落入每个区间内的像素数或像素比例(也称为“项”)构成。
-
直方图特征向量:描述一张图像的直方图信息所构成的向量。
-
直方图相似度度量:比较两个直方图特征向量的相似度方法。
compareHist函数的详细说明
compareHist函数用于比较两个直方图特征向量的相似度,函数原型如下:
其中,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函数比较两张图片的直方图相似度。
需要先将两张图片转换成灰度图,然后用cv2.calcHist函数计算出直方图特征向量,最后用cv2.compareHist函数比较两个直方图的相似度。
示例2:比较两张图片多通道的直方图相似度
如果要比较的图片是彩色图片,可以考虑使用多通道的直方图特征向量进行比较。下面是一个示例,演示如何比较两张图片多通道的直方图相似度。
这个示例中,需要计算RGB三个通道的直方图特征向量,然后用cv2.merge函数将三个通道合并成一个多通道的直方图特征向量,最后用cv2.compareHist函数比较两个多通道直方图的相似度。