提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
利用cv进行图像操作,及matplotlib包指示
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可用于人机互动、物体识别、图像分、人脸识别、动作识别、运动跟踪、机器人等。
安装,只需打开 anaconda promp 然后 pip install opencv
灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。
代码如下(示例):
import cv2
import matplotlib.pyplot as plt
# 将图像转成灰度图并读取到数组中
img = cv2.imread('IMG1.JPG',cv2.IMREAD_GRAYSCALE)
width,height = img.shape[:2][::-1]
#将图片缩小便于显示观看
img_resize = cv2.resize(img,(int(width*0.1),int(height*0.1)),interpolation=cv2.INTER_CUBIC)
# 使用matplotlib的库绘制图片进行显示
# 使其标题可以显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure() # 新建一个图像
plt.subplot(1, 2, 1)
plt.imshow(img_resize)
plt.title('原图')
plt.axis('off') # 不显示坐标轴
# 图像直方图
plt.subplot(1, 2, 2)
plt.hist(img_resize.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])
plt.show()
直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
代码如下(示例):
#对灰度图像均衡化
dst = cv2.equalizeHist(img_resize)
#对彩色图像均衡化,需要分离成三个通道,分别处理
img2_resize = cv2.resize(img2,(int(width*0.1),int(height*0.1)),interpolation=cv2.INTER_CUBIC)
(b, g, r) = cv2.split(img2_resize)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
#原图及直方图
plt.figure(figsize=(30,30)) # 新建一个图像
plt.subplot(2, 4, 1)
plt.title('原图')
plt.imshow(img_resize)
plt.subplot(2, 4, 2)
plt.hist(img_resize.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])
# plt.figure() # 新建一个图像
plt.subplot(2, 4, 3)
plt.title('均衡化后')
plt.imshow(dst)
plt.subplot(2, 4, 4)
plt.hist(dst.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])
plt.figure(figsize=(30,30)) # 新建一个图像
plt.subplot(2, 4, 5)
plt.title('均衡化后')
plt.imshow(result)
plt.subplot(2, 4, 6)
plt.hist(bH.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])
plt.subplot(2, 4, 7)
plt.hist(gH.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])
plt.subplot(2, 4, 8)
plt.hist(rH.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
代码如下(示例):
img_Guassian1 = cv2.GaussianBlur(img_resize,(5,5),1)
img_Guassian2 = cv2.GaussianBlur(img_resize,(5,5),5)
plt.figure(figsize=(10,10)) # 新建一个图像
plt.subplot(2, 2, 1)
plt.title('原图')
plt.imshow(img_resize)
plt.subplot(2, 2, 2)
plt.title('标准差1')
plt.imshow(img_Guassian1)
plt.subplot(2, 2, 3)
plt.title('标准差5')
plt.imshow(img_Guassian2)
opencv实现了各种方法,可以对图像进行基本处理