OpenCV学习笔记-直方图应用

 

直方图均衡化 就是调整图像的对比度,让图像显示更清晰,一般有两种方法:全局调整和局部自适应,局部自适应的数值一般是2**n

直方图均衡化都是基于灰度图

 

 

 

 

#全局调整
def equalizeHist_demo(img):
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    dst = cv.equalizeHist(gray)
    cv.imshow( 'equalizeHist_demo',dst)
 
#局部自适应
def clahe_dome(img):
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    clahe = cv.createCLAHE( clipLimit= 5.0, tileGridSize=( 8, 8))
    #clipLimit 的值默认是40 值越大对比度越大  
    dst = clahe.apply(gray)
    cv.imshow( 'clahe_dome',dst)
 

可以看出来,全局均衡化,对比度提升的太大,容易造成一些地方与背景同化,所以一般用局部自适应均衡化

 

另一种应用是直方图比较,比较两张图片的相似度

直方图的比较方法有四种:按照图像顺序排列:相关性、卡方、交叉、巴氏距离

 

 

在进行直方图比较前,先做一个rgb的直方图

 

 

 

 

 

#做一个rgb的直方图
def create_rgb_hist(img):
    h, w, c = img.shape
    rgbHist = np.zeros([ 16* 16* 16, 1],np.float32) # blue 16个 green 16个 red16个
    bsize = 256/ 16 # 直方图有256个bins 除以16 =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 = np.int(b/bsize)* 16* 16 + np.int(g/bsize)* 16 + np.int(r/bsize) #降维操作 把256*256*256 转成16*16*16
        rgbHist[np.int(index), 0] += 1    
    return rgbHist
 
之后再进行RGB直方图的比较
def hist_compare(img1,img2):
    hist1 = create_rgb_hist(img1)
    hist2 = create_rgb_hist(img2)
    match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA) # 巴氏距离 越小图片的相似度越高
    match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL) # 相关性 越大图片的相似度越高
    match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR) # 卡方 越小图片相似度越高
    match4 = cv.compareHist(hist1, hist2, cv.HISTCMP_INTERSECT)
    #巴氏距离和相关性数值都在0 1之间 所以一般用他们两个来比较
    print('巴氏距离: %s, 相关性: %s, 卡方: %s, 交叉: %s' % (match1,match2,match3,match4))

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值