计算机视觉openCV直方图与均值化

直方图与均值化

直方图

(个人看法:他就是把一个图像(一大堆的矩阵数字)全部按照中方图统计一下从0-255)
三个颜色统计出来三个线

计算机视觉openCV直方图与均值化

计算机视觉openCV直方图与均值化

计算机视觉openCV直方图与均值化
代码

import cv2
from matplotlib import pyplot as plt
img=cv2.imread(‘cat.jpg’)
color=(‘b’,‘g’,‘r’)
for i,col in enumerate(color):
hist=cv2.calcHist([img],[0],None,[256],[0,256])
plt.plot(hist,color=col)
plt.xlim([0,256])
plt.imshow(hist)
plt.show()
print(hist.shape)

掩码mask操作
第一步创建掩码mask操作
计算机视觉openCV直方图与均值化
然后读入猫的图片(图一)
计算机视觉openCV直方图与均值化
让猫的图跟掩码图(图二)and一下(图三)
计算机视觉openCV直方图与均值化
绘制两个图作比较(图四)
计算机视觉openCV直方图与均值化

图一:猫猫原图
图二:设置的掩码
图三:用猫猫原图and掩码图
图四:绘制前后两个图作比较
计算机视觉openCV直方图与均值化

图像均衡(要转换为灰度图像才能均衡化)
直方图均衡化算法原理
累计概率是前面相加eg:第三个就是前面三个相加
根据函数映射就是(255-0)取值范围*概率
计算机视觉openCV直方图与均值化
代码
第一步:读入图片

第二步:使用cv2.equalizeHist(img)均衡化像素

第三步:使用plt.hist 画出均衡化的直方图

第四步:使用plt.imshow 画出均衡化后的图像

import cv2
from matplotlib import pyplot as plt
img=cv2.imread(‘cat.jpg’,0)
plt.hist(img.ravel(),256) #ravel(把多维数组转化为一维数组)
plt.show()
equ=cv2.equalizeHist(img)图像均衡
plt.hist(equ.ravel(),256)
plt.show()

均衡化前后对比
计算机视觉openCV直方图与均值化

计算机视觉openCV直方图与均值化
自动均值化

第一步:使用cv2.createCLAHE(clipLimit=2.0, titleGridSize=(8, 8)) 实例化均衡直方图函数
第二步:使用.apply进行均衡化操作

第三步:进行画图操作

图一原图
图二图像均衡(种全局的均衡化也会存在一些问题,由于整体亮度的提升,也会使得局部图像的细节变得模糊,因为我们需要进行分块的局部均衡化操作)好多细节都没了
图三自动均值化
计算机视觉openCV直方图与均值化