Python opencv(十) 图像直方图的应用

本文介绍了OpenCV中的图像处理技术,包括直方图均衡化和局部直方图增强(CLAHE)。通过cv.equalizeHist()函数实现直方图均衡化,增强图像对比度;使用cv.createCLAHE()创建CLAHE对象,对图像进行局部对比度增强,使图像更加自然。同时,文章还展示了如何利用cv.compareHist()计算图像的相似性,通过巴氏距离、相关性和卡方指标评估图像之间的相似度。
摘要由CSDN通过智能技术生成

前提条件

使用工具python3.x
使用库 :numpy、opencv,

api简介

1.cv.equalizeHist
使用cv.cvtColor(image, cv.COLOR_BGR2GRAY)将图片转为gray,以gray为参数,使用cv.equalizeHist(gray)可以得到对比度更强的图。

2.cv.createCLAHE
自动化直方图,主要是对图片进行局部直方化,对比强度与原图差别不大,显得更自然。
3.cv.compareHist
利用图像的直方图,分析图片的相似性。cv2.compareHist(H1, H2, Methods)
H1,H2 为图片转换后的直方图,Methods是比较方式

关于图片直方化,原理及用处等可参考这里
https://baike.baidu.com/item/%E7%9B%B4%E6%96%B9%E5%9B%BE%E5%9D%87%E8%A1%A1%E5%8C%96?fr=aladdin

代码示例

import cv2 as cv
import numpy as np

#直方图均衡化 equalHist_demo clahe_demo
def equalHist_demo(image): #直方图均衡化,对比度增强
	gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
	dst = cv.equalizeHist(gray) #用gray
	cv.imshow('equalHist_demo', dst)

def clahe_demo(image):
	gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
	clahe = cv.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8))
	dst = clahe.apply(gray)
	cv.imshow('clahe_demo',dst)

#直方图比较
def create_rgb_hist(image):
	h, w, c = image.shape
	rgbHist = np.zeros([16*16*16,1], np.float32)
	bsize = 256/16
	for row in range(h):
		for col in range(w):
			#构造 r g b 通道
			b = image[row, col, 0]
			g = image[row, col, 1]
			r = image[row, col, 2]

			index = np.int(b/bsize)*16*16+np.int(g/bsize)*16+np.int(r/bsize)
			rgbHist[np.int(index), 0] = rgbHist[np.int(index), 0] + 1
	return rgbHist  #返回三通道的直方图

#巴氏距离
def hist_compare(image1, image2):
	hist1 = create_rgb_hist(image1)
	hist2 = create_rgb_hist(image2)
	match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
	match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
	match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
	print("巴氏距离: %s, 相关性:%s, 卡方:%s" %(match1, match2, match3))
	#巴氏距离:很小,很相似。相关性:越接近一越相似。卡方:越小相似度越高

src=cv.imread("D:/openCV_image/image/6.png")
# src=cv.imread("D:/openCV_image/image/2_2.png")
# print(src)
# cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)


# cv.imshow("input image",src)
# equalHist_demo(src)
# clahe_demo(src)


image1=cv.imread("D:/openCV_image/image/2_2.png")
image2=cv.imread("D:/openCV_image/image/7.png")
cv.imshow("input1",image1)
cv.imshow("input image2",image2)
hist_compare(image1, image2) #图片相似性分析


cv.waitKey(0)
cv.destroyAllWindows()


原图:
在这里插入图片描述

1.直方图均衡化效果比较:

clahe_demo(src)
equalHist_demo(src)
在这里插入图片描述

2.hist_compare的效果:

由巴氏距离可知图片相似性很低
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值