本期主要介绍canny算子,了解canny算子的流程以及各个流程的原理和实现。
完成本期内容,你可以:
- 了解canny算子的流程和应用
若要运行案例代码,你需要有:
-
操作系统:Ubuntu 16 以上 或者 Windows10
-
工具软件:VScode 或者其他源码编辑器
-
硬件环境:无特殊要求
-
核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16
点击下载源码
canny算子函数
OpenCV将Canny算子封装成了cv2.Canny()
方法。
函数原型: edges = cv2.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]])
dst为输出图像。
参数描述如下:
edges
:计算得到的边缘图像。image
:8位输入图像。threshold1
:处理过程中的第一个阈值。threshold2
:处理过程中的第二个阈值。apertureSize
:Sobel算子的孔径大小。L2gradient
:计算图像梯度强度(gradient magnitude)的标识。
canny算子流程
① 高斯滤波对图像进行平滑处理;
② Sobel算子计算图像的梯度幅值;
③ 对图像的梯度幅值进行非极大值抑制;
④ 滞后阈值处理进行边缘连接。
具体步骤
1. 创建项目结构
创建项目名为使用canny算子进行人像勾勒
,项目根目录下新建code
文件夹储存代码,新建dataset
文件夹储存数据,项目结构如下:
使用canny算子进行人像勾勒 # 项目名称
├── code # 储存代码文件
├── dataset # 储存数据文件
注:如项目结构已存在,无需再创建。
2. 使用canny算子进行人像勾勒
-
在
code
文件夹下创建edge.py
文件; -
导入所需的库,OpenCV;
-
读取
dataset
文件夹下的girl.png
图片,并进行展示,标题为original ; -
使用阈值为128 200的canny算子进行人像勾勒,并展示结果;
-
使用阈值为32 128的canny算子进行人像勾勒,并展示结果。
代码实现
# 导入所需模块 OpenCV
import cv2
# 读取图片
img = cv2.imread("../dataset/girl.png", 0)
cv2.imshow("original", img)
# 使用阈值为128 200的canny算子进行人像勾勒
r1 = cv2.Canny(img,128,200)
cv2.imshow("canny_128_200", r1)
# 使用阈值为32 128的canny算子进行人像勾勒
r2 = cv2.Canny(img,32,128)
cv2.imshow("canny_32_128", r2)
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 分步实现canny边缘检测(了解)
- 在
code
文件夹下找到expand.py
文件; - 根据canny边缘检测的流程来读懂代码,了解实现每一步操作的具体流程。
本期通过使用canny算子实现了人像的勾勒,巩固了canny算子的原理和实现。
点击下载源码