OpenCV中的直方图比较

OpenCV中的直方图比较

用于近似相似度的方式:
比较方式(method)
1.相关性比较 (method=cv.HISTCMP_CORREL) 值越大,相关度越高,最大值为1,最小值为0
2.卡方比较(method=cv.HISTCMP_CHISQR )值越小,相关度越高,最大值无上界,最小值0
3.巴氏距离比较(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相关度越高,最大值为1,最小值为0

代码实现:

#直方图比较(比较图像相似度)
#1.创建直方图
def create_hist(img):
    h,w,ch = img.shape
    # 创建一个(16*16*16,1)的初始矩阵,作为直方图矩阵
    # 16*16*16的意思为三通道每通道有16个bins
    bgrhist = np.zeros([16*16*16,1],np.float32)
    bsize = 256/16
    for row in range(h):
        for col in range(w):
            b = img[row,col,0]
            g = img[row,col,1]
            r = img[row,col,2]
            # 人为构建直方图矩阵的索引,该索引是通过每一个像素点的三通道值进行构建
            index = int(b / bsize) * 16 * 16 + int(g / bsize) * 16 + int(r / bsize)
            # 该处形成的矩阵即为直方图矩阵
            bgrhist[int(index), 0] += 1
    return bgrhist


#2.比较直方图
'''
比较方式(method)
1.相关性比较 (method=cv.HISTCMP_CORREL) 值越大,相关度越高,最大值为1,最小值为0
2.卡方比较(method=cv.HISTCMP_CHISQR )值越小,相关度越高,最大值无上界,最小值0
3.巴氏距离比较(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相关度越高,最大值为1,最小值为0
'''
img1 = cv2.imread('tong.jpg')
x,y = img1.shape[:2]
img1 = cv2.resize(img1,(int(x/4),int(y/4)))
img2 = cv2.imread('tong2.jpg')
x,y = img2.shape[:2]
img2 = cv2.resize(img2,(int(x/4),int(y/4)))
cv2.imshow('tongtong1',img1)
cv2.imshow('tongtong2',img2)
hist1 = create_hist(img1)
hist2 = create_hist(img2)
match1 = cv2.compareHist(hist1,hist2,cv2.HISTCMP_CORREL)
match2 = cv2.compareHist(hist1,hist2,cv2.HISTCMP_CHISQR)
match3 = cv2.compareHist(hist1,hist2,cv2.HISTCMP_BHATTACHARYYA)
print("相关性:%s,卡方:%s,巴氏距离:%s"%(match1,match2,match3))
cv2.waitKey()

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值