opencv中的直方图是反应一张图片中的颜色分布

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('t2.jpg')
cv2.imshow('test',img)
img_B = cv2.calcHist([img],[0],None,[255],[0,255]) #蓝颜色直方图
plt.plot(img_B,label='B',color='b')
img_G = cv2.calcHist([img],[1],None,[255],[0,255]) #绿颜色直方图
plt.plot(img_G,label='',color='g')
img_R = cv2.calcHist([img],[2],None,[255],[0,255]) #红颜色直方图
plt.plot(img_R,label='R',color='r')
plt.show()


直方图均衡化
可用来进行去一些雾,使得图像更加清晰,根据下图的像素分布,直方图均衡化相当于把原图的图像的分布拉宽,使得像素分布相对均匀。
# 直方图均衡化
img = cv2.imread('test2.jpg',0)
his = cv2.calcHist([img],[0],None,[255],[0,255])
plt.plot(his,label='his',color='r')
dst = cv2.equalizeHist(img)
his = cv2.calcHist([dst],[0],None,[255],[0,255])
plt.plot(his,label='his',color='b')
plt.show()
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)


自适应直方图均衡化
相当于生成一个滑动窗口,在这个滑动窗口内进行直方图均值化,相当于局部直方图均值化,使得整张图更加自然,如下图依次是原图、直方图均衡化,自适应直方图均衡化,由图可见直接直方图均值化图片显得比较亮,而自适应直方图均衡化比较自然。
# 自适应直方图
img = cv2.imread('ttt.jpg',0)
cv2.imshow('src',img)
# 普通直方图均值化
dst1 = cv2.equalizeHist(img)
cv2.imshow('dst1',dst1)
# 自适应直方图均值化
clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
dst2 = clahe.apply(img)
cv2.imshow('dst2',dst2)
cv2.waitKey(0)

直方图反投影
# 直方图反投影
roi = cv2.imread('bg_ball.jpg')
hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)
target = cv2.imread('football.jpg')
hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)
roihist = cv2.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256],1)
cv2.normalize(roihist,roihist,0,255,cv2.NORM_MINMAX)
dst = cv2.calcBackProject([hsvt],[0,1],roihist,[0,180,0,256],1)
disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
dst = cv2.filter2D(dst,-1,disc)
ret,thresh = cv2.threshold(dst,50,255,0)
thresh = cv2.merge((thresh,thresh,thresh))
res = cv2.bitwise_and(target,thresh)
res = np.hstack((target,thresh,res))
cv2.imshow('img',res)
cv2.waitKey(0)


本文详细介绍了OpenCV中直方图的应用,包括颜色直方图绘制、直方图均衡化、自适应直方图均衡化及直方图反投影。通过实例展示了如何使用这些技术改善图像质量,实现目标检测。
27万+

被折叠的 条评论
为什么被折叠?



