好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

前提条件

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

api简介

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

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

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

代码示例

import?cv2?as?cvimport?numpy?as?np#直方图均衡化?equalHist_demo?clahe_demodef?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测试数据pareHist(hist1,?hist2,?cv.HISTCMP_BHATTACHARYYA)
	match2?=?cv测试数据pareHist(hist1,?hist2,?cv.HISTCMP_CORREL)
	match3?=?cv测试数据pareHist(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的效果:

由巴氏距离可知图片相似性很低

查看更多关于Python opencv(十) 图像直方图的应用的详细内容...

  阅读:40次