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

本期主要介绍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算子的原理和实现。

点击下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24688.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第五篇、基于Arduino uno,获取超声波(HC04)传感器的距离数据——结果导向

0、结果 说明:先来看看串口调试助手显示的结果,显示的是一个距离值,如果是你想要的,可以接着往下看。 1、外观 说明:虽然超声波传感器形态各异,但是原理和代码都是适用的。 2、连线 说明:只…

秒杀系统常见问题—如何避免库存超卖?

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 先看问题 首先上一串代码 …

Vue.js 比较重要知识点总结一

概述 谈一谈你对 Vue.js 的响应式数据的理解Vue3 出现解决了什么问题?它有哪些优势?Vue3 新特性有哪些vue2 和 vue3 的响应式有什么区别? 谈一谈你对 Vue.js 的响应式数据的理解 Vue 2.x 对象类型:通过 object.defineProperty(…

实时频谱-3.1实时频谱分析仪测量

RSA 测量类型 泰克RSA 可以在频域、时域、调制域和统计域中工作。 频域测量 基本频域测量是实时 RF 数字荧光显示(DPX)频谱显示测量、频谱显示测量和频谱图显示测量功能。 DPX 频谱 DPX 频谱测量对 RSA 发现其它分析仪漏掉的难检信号的能力至关重要。在所有泰克 RSA 中&am…

SAP-MM-内向外向交货单

1、内向&外向交货单概念 外向交货(outbound delivery)是用在客户与企业之间的交货单,而内向交货(inbound delivery)则是用在供应商与企业之间的交货单;换言之,外向交货多用于SD 模块&#…

PriorityQueue优先级队列

前言 优先级队列就是在堆的基础上进行改造,那么什么是堆,又什么是优先级队列呢? 我们一起来看看吧! 目录 前言 一、堆 (一)堆的创建 (二)堆的插入 (三)堆…

群晖DS920 video station使用教程

群晖DS920 video station使用教程 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 安装video station在群晖套件里点一下就好,这里不说了。 一、添加视频库 可以添加电视剧、电视节目等类型。 比如我在国产剧这个视频…

uniapp滚动加载 下拉刷新

前言 在日常开发中,滚动加载和下拉刷新是非常常见的功能,页面数据过多时,需要滚动加载优化性能,本篇技术分享博客将介绍如何在uniapp中实现滚动加载和下拉刷新。 预览 滚动加载 下拉刷新 一、滚动加载 滚动加载指的是当用户滑…

PHP 反序列化漏洞

PHP反序列化漏洞在实际测试中出现的频率并不高,主要常出现在CTF中。 PHP序列化概述 PHP序列化函数: serialize:将PHP的数据,数组,对象等序列化为字符串unserialize:将序列化后的字符串反序列化为数据&…

java 利用poi根据excel模板导出数据(二)

本文是 java 利用poi根据excel模板导出数据(一) 的续篇 经常有poi的开发一定会碰到三个名词: HSSFWorkbook 、 XSSFWorkbook、SXSSFWorkbook; 这三个都是导出excel的形式,具体区别: HSSFworkbook,XSSF…

Golang每日一练(leetDay0080) 矩形面积、翻转二叉树

目录 223. 矩形面积 Rectangle Area 🌟🌟 226. 翻转二叉树 Invert Binary Tree 🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

SAP-MM-采购申请-价值特性

采购申请审批在维护价值特性时要注意是抬头价值还是行价值,要确定选择哪个,配置时对应配置。 1、创建价值特性CT04 字段名称:CEBAN-GSWRT,和CEBAN-GFWRT 抬头总价值:CEBAN-GFWRT;如果选择的是抬头审批&am…

数字信号处理8:利用Python进行数字信号处理基础

我前两天买了本MATLAB信号处理,但是很无语,感觉自己对MATLAB的语法很陌生,看了半天也觉得自己写不出来,所以就对着MATLAB自己去写用Python进行的数字信号处理基础,我写了两天左右,基本上把matlab书上的代码…

开源云原生数仓引擎ByConity 存储计算分离架构和优势

供稿 | ByConity技术团队 出品 | CSDN 云计算 ByConity是一款字节跳动开源的云原生数仓引擎。它的一个重要优势是采用存储计算分离的架构,实现了读写分离和弹性扩缩容。这种架构确保读操作和写操作不会相互影响,使得计算资源和存储资源解耦,…

基于html+css的图展示102

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

BLE协议栈结构

// 开坑BLE协议栈 0 镇楼图 接下来会自下往上粗略分析各个层级,后续会有对各层的细致解读 1 CONTROLLER 1.1 PHY BLE使用ISM频段(频率范围是2.400-2.4835 GHz)。将整个频带分为40份,每份的带宽为2MHz,称作RF Chann…

如何使用Python自动化测试工具Selenium进行网页自动化?

引言 Selenium是一个流行的Web自动化测试框架,它支持多种编程语言和浏览器,并提供了丰富的API和工具来模拟用户在浏览器中的行为。Selenium可以通过代码驱动浏览器自动化测试流程,包括页面导航、元素查找、数据填充、点击操作等。 与PyAuto…

抖音账号矩阵系统源码开发之——视频发布功能开发

视频发布权限在账号矩阵系统研发之初,都是一个备受争议的功能,最早之前我们使用的视频发布权限名字是Video.creat, video.delete权限,但是该权限于2022年10月份做了权限的收回,后又在上架了一个能力叫发布内容至抖音:…

PostGIS的10个最佳实践

PostGIS 是一个功能强大的开源空间数据库,可用于存储、查询和分析地理空间数据。 对于需要存储和分析大量地理空间数据的组织来说,这是一个流行的选择。 但是,正确使用 PostGIS 以充分利用它很重要。 在本文中,我们将讨论 10 个 …

【2023年4月美赛加赛】Z题:The future of Olympics 25页完整论文

【2023年4月美赛加赛】Z题:The future of Olympics 25页完整论文 1 题目 背景 国际奥委会(IOC)正面临着夏季奥运会和冬季奥运会申办数量的减少**[1]**。在过去,举办奥运会的竞争非常激烈,声望也很高。然而,最近,主办…