您的位置:首页 > 编程语言 > Python开发

Python3与OpenCV3.3 图像处理(十二)--图像直方图应用

2017-12-05 23:30 786 查看
一、调节对比度

import cv2 as cv

def equalHist(image):
"""直方图均衡化,图像增强的一个方法"""
#彩色图片转换为灰度图片
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)

#直方图均衡化,自动调整图像的对比度,让图像变得清晰
dst=cv.equalizeHist(gray)
cv.imshow("equalHist",dst)

def clahe(image):
"""
局部直方图均衡化
把整个图像分成许多小块(比如按8*8作为一个小块),
那么对每个小块进行均衡化。
这种方法主要对于图像直方图不是那么单一的(比如存在多峰情况)图像比较实用
"""
# 彩色图片转换为灰度图片
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
#cliplimit:灰度值
#tilegridsize:图像切割成块,每块的大小
clahe = cv.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
dst=clahe.apply(gray)
cv.imshow("clahe", dst)

src=cv.imread('test1.jpg')
#图一
cv.imshow("yt", gray)
#图二
equalHist(src)
#图三
clahe(src)

从图中的可以看出来,图一比较模糊,经过全图的直方图均衡化后,图片变得清晰了(图二),但是图片明显的对比度偏高,利用局部直方图均衡化后(图三),图片看起来就比较舒服了

注意:1、全图的直方图均衡化会导致对比度过度增强,所以在一些情况下应使用局部直方图均衡化;

           2、opencv中直方图均衡化都是基于灰度图像的
图一



图二



图三



二、对比图片相似度

import cv2 as cv
import numpy as np

def create_rgb_hist(image):
"""创建rgb 三通道直方图"""
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):
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))

hist_compare(cv.imread('test1.jpg'),cv.imread('textImg.jpg'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: