在图像处理的过程中,经常会遇到图像存在多余的线条或者噪声的情况,对于这种情况我们会先对图像进行预处理,去除掉对图形内容有影响的噪声,在进行后续的处理。
本节实验我们介绍使用图像膨胀来处理图形的多余线条,进行图像修复。
完成本期内容,你可以:
-
了解图像膨胀的原理和应用
-
掌握使用图像膨胀操作的使用
若要运行案例代码,你需要有:
-
操作系统:Ubuntu 16 以上 或者 Windows10
-
工具软件:VScode 或者其他源码编辑器
-
硬件环境:无特殊要求
-
核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16
点击下载源码
膨胀
OpenCV将膨胀操作封装成了cv2.dilate()
方法。
函数原型:dst = cv2.dilate(src, kernel, anchor, iterations, borderType, borderValue)
dst为输出图像。
参数描述如下:
- src:被处理的图像
- kernel:膨胀使用的核
- anchor:可选参数,锚点的位置
- iterations:可选参数,膨胀操作的迭代次数,默认值为1
- borderType:可选参数,边界样式,建议采用默认值
- borderValue:可选参数,边界值,建议采用默认值
具体步骤
1. 创建项目结构
创建项目名为图像修复
,项目根目录下新建code
文件夹储存代码,新建dataset
文件夹储存数据,项目结构如下:
图像修复 # 项目名称
├── code # 储存代码文件
├── dataset # 储存数据文件
注:如项目结构已存在,无需再创建。
2. 对图像进行修复
- 在
code
文件夹下创建repair.py
文件; - 导入所需的库,OpenCV、numpy;
- 读取
dataset
文件夹下的repair.png
图片,并进行展示; - 创建一个
3*3
的都为1 的数组作为滤波核; - 对图像进行膨胀处理,并展示结果;
代码实现
# 导入OpenCV、numpy
import cv2
import numpy as np
# 读取原图
img = cv2.imread("../dataset/repair.png")
cv2.imshow("original",img)
# 创建3*3的数组作为核
k = np.ones((3, 3), np.uint8)
# 膨胀操作
dst = cv2.dilate(img, k)
cv2.imshow("dilate",dst)
cv2.waitKey()
cv2.destroyAllWindows()
经过膨胀操作之后,图像中的多余的线条都已经去掉了,虽然膨胀操作会造成图像原图模糊,边缘变粗,但是并没有改变图像的特征其他的处理来减弱图像模糊带来的影响。
点击下载源码