一、安装和配置Python+opencv
具体方式网上都有,因此不在此做过多描述。 通过使用opencv,验证配置成功。
二、 直方图
2.1 基本原理
图像直方图是用一表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。 而灰度直方图则是表示不同灰度值在该图像里的分布,以横轴表示像素值,纵轴表示对应像素值的数量 直方图失去图像的坐标信息。
2.2 代码实现
使用matplotlib绘制直方图
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("E://img1.jpg")
reim = cv2.resize(img,dsize=(600,480))
cv2.imshow("test",reim)
plt.hist(reim.ravel(), 256)
plt.show()
cv2.waitKey()
三、高斯滤波
3.1 基本原理
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。因此虽然能消除噪声,但也不可避免的产生了图像模糊的后果。二维高斯分布如下:
3.2 代码实现
使用opencv的函数cv2.GaussianBlur,并设置模板大小
gsim = cv2.GaussianBlur(reim, (5, 5), 0)
plt.subplot(1,2,1)
reim=cv2.cvtColor(reim,cv2.COLOR_BGR2RGB)
plt.title("origin")
plt.imshow(reim)
plt.subplot(1,2,2)
gsim=cv2.cvtColor(gsim,cv2.COLOR_BGR2RGB)
plt.title("gaussian")
plt.imshow(gsim)
将其输出,发现确实经过滤波后变得模糊
四、直方图均衡化
4.1 基本原理
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。其定义与实现效果见下图:
4.2 代码实现
在此主要展示灰度图像的直方图均衡化,使用函数cv2.equalizeHist 即可。对于彩色图像,将彩色图像先用split()方法,将三个通道拆分,然后分别进行均衡化.最后使用merge()方法将均衡化之后的三个通道进行合并,原理同灰度相同,故不过多展示。
gray=cv2.cvtColor(reim,cv2.COLOR_BGR2GRAY)
plt.subplot(2,2,1)
gray1=cv2.cvtColor(gray, cv2.COLOR_BGRA2RGB)
plt.imshow(gray1)
plt.subplot(2,2,2)
plt.hist(gray1.ravel(),256)
plt.subplot(2,2,3)
equal = cv2.equalizeHist(gray)
equal1=cv2.cvtColor(equal, cv2.COLOR_BGRA2RGB)
plt.imshow(equal1)
plt.subplot(2,2,4)
plt.hist(equal1.ravel(), 256)
结果如下。对比图像直方图可以看到,经过直方图均衡化后直方图分布更均匀,图像也更加的明亮
五、总结
本次实验内容与上学去所学的数字图像处理内容相似,且opencv之前在C++中也使用过,函数比较熟悉。但是在python中用matplotlib输出BGR图像还是有一番费劲的。这是本课程第一次实验,后续继续加油吧。
|