day10 - 使用canny算子进行人像勾勒

news/2025/2/19 4:50:56/

本期主要介绍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算子进行人像勾勒

  1. code文件夹下创建edge.py文件;

  2. 导入所需的库,OpenCV;

  3. 读取dataset文件夹下的girl.png图片,并进行展示,标题为original ;

  4. 使用阈值为128 200的canny算子进行人像勾勒,并展示结果;

  5. 使用阈值为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边缘检测(了解)

  1. code文件夹下找到expand.py文件;
  2. 根据canny边缘检测的流程来读懂代码,了解实现每一步操作的具体流程。

本期通过使用canny算子实现了人像的勾勒,巩固了canny算子的原理和实现。

点击下载源码


http://www.ppmy.cn/news/76415.html

相关文章

嘉兴桐乡考证培训-23年教资认定注意事项你知道吗?

又到了新的一年了,去年错过认定的同学们可以竖起耳朵啦~ 每年认定机会有两次,大部分省份一般上半年下半年各一次。 问:在校生可以认定么? 答:可以,但有年级限制:本科生大四最后一学期&#xf…

Linux多路转接之epoll

文章目录 一、select方案和poll方案还存在的缺陷二、epoll的认识1.epoll的基本认识2.epoll的原理3.epoll函数接口 三、编写epoll服务器四、epoll工作方式1.LT模式2.ET模式 一、select方案和poll方案还存在的缺陷 多路转接方案一开始是select方案,但是select方案缺点…

通过九点选择CRM系统

众所周知,CRM系统对于企业的发展至关重要。它可以帮助企业增强市场竞争力,拓展新的市场机会,提升品牌形象和口碑,提高客户满意度和忠诚度,实现业绩的大幅增长。那么选型时,CRM系统哪家好?看准这…

C++中的取余函数%、remainder、fmod以及matlab中的取余函数mod

C 1 整数取余 % 2 remainder函数 https://cplusplus.com/reference/cmath/remainder/?kwremainder double remainder (double numer , double denom); float remainder (float numer , float denom); long double remainder (long double numer, long double denom); doub…

【JavaSE】Java基础语法(一)

文章目录 1. ⛄常量2. ⛄数据类型2.1 🌠🌠计算机存储单元2.2 🌠🌠Java 中的数据类型 3. ⛄变量的注意事项4. ⛄键盘录入5. ⛄标识符 1. ⛄常量 常量:在程序运行过程中,其值不可以发生改变的量。 Java中的常…

【Linux】初识优雅的Linux编辑器——Vim

❤️前言 大家好!今天给大家带来的博客内容是关于Linux操作系统下的一款多模式文本编辑器Vim。本文将和大家一起来了解Vim编辑器的一些基础知识。 正文 Vim是一个多模式的文本编辑器(一共有十二种模式),其中我们当我们初学Vim时主要了解如下三种工作模式…

__weak类型函数

前言 今天无意之间看到了一个__weak类型函数,之前没有了解过,就查了一下资料。现在分享一下。 __weak是什么 含义解释 (1)其实这个用白话很好理解:__weak 表示弱定义,表示如果你自己定义了同名的函数就不用…

SCMA基本原理介绍

SCMA: Sparse Code Multiple Access SCMA基本原理 我们考虑一个同步(synchronous)的SCMA系统, 含1个基站(Base Station, BS); J J J个用户(so called layers);K个OFDM…