一、安装和配置Python+opencv
具体方法网上都有,这里就不过多介绍了。
通过使用opencv,验证配置成功。
2.直方图
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) # ravel()是numpy里的函数,将多维数组转换为一维数组
plt.show()
cv2.waitKey()
3. 高斯滤波器
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图像还是有一番费劲的。这是本课程第一次实验,后续继续加油吧。
文章出处登录后可见!
已经登录?立即刷新