当前位置: 首页 > news >正文

Python cv2边缘检测与轮廓查找:从理论到实战

在计算机视觉领域,边缘检测与轮廓查找是图像分析的核心技术。本文将结合OpenCV库(cv2模块),从理论原理到代码实战,系统讲解如何通过Python实现这两个关键操作。

一、基础概念解析

1.1 边缘检测的本质

边缘是图像中灰度/颜色发生剧烈变化的区域,其数学本质是图像梯度的局部最大值。常见应用场景包括:

  • 物体边界识别
  • 特征提取(如车牌定位)
  • 图像分割预处理

1.2 轮廓查找的意义

轮廓是图像中连续边缘点的集合,代表物体的形状信息。与边缘检测不同,轮廓查找更关注闭合区域的完整描述,常用于:

  • 物体计数与分类
  • 形状分析(如圆形度检测)
  • 目标跟踪

二、环境准备与基础流程

2.1 环境配置

pip install opencv-python numpy matplotlib

2.2 完整处理流程

import cv2
import numpy as np
from matplotlib import pyplot as plt# 读取图像(建议使用灰度模式)
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)# 1. 预处理(降噪)
blurred = cv2.GaussianBlur(img, (5,5), 0)# 2. 边缘检测
edges = cv2.Canny(blurred, threshold1=50, threshold2=150)# 3. 轮廓查找
contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL,  # 检索模式cv2.CHAIN_APPROX_SIMPLE  # 近似方法
)# 4. 结果可视化
result = cv2.drawContours(img.copy(), contours, -1, (0,255,0), 2)
plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
plt.show()

三、关键技术详解

3.1 边缘检测核心参数

Canny算法参数优化技巧

  • threshold1/threshold2:双阈值策略,建议保持2:1~3:1比例
  • 自适应阈值改进方案:
    median = np.median(img)
    sigma = 0.33
    lower = int(max(0, (1.0 - sigma) * median))
    upper = int(min(255, (1.0 + sigma) * median))
    

3.2 轮廓查找进阶参数

参数选项适用场景
检索模式RETR_EXTERNAL
RETR_TREE
仅外层轮廓
完整层级结构
近似方法CHAIN_APPROX_NONE
CHAIN_APPROX_SIMPLE
保留所有点
压缩冗余点

3.3 轮廓特征分析

for cnt in contours:# 面积过滤area = cv2.contourArea(cnt)if area < 100: continue# 最小外接矩形rect = cv2.minAreaRect(cnt)box = cv2.boxPoints(rect)# 轮廓近似(多边形逼近)epsilon = 0.02 * cv2.arcLength(cnt, True)approx = cv2.approxPolyDP(cnt, epsilon, True)

四、实战案例:文档扫描矫正

def document_scanner(img_path):# 预处理gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)blurred = cv2.GaussianBlur(gray, (5,5), 0)# 自适应阈值处理thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV, 11, 2)# 轮廓查找contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 筛选最大轮廓(假设文档为最大区域)max_cnt = max(contours, key=cv2.contourArea)# 透视变换rect = cv2.minAreaRect(max_cnt)box = cv2.boxPoints(rect)box = np.int0(box)# 获取变换矩阵width = int(rect[1][0])height = int(rect[1][1])src_pts = box.astype("float32")dst_pts = np.array([[0, height-1],[0, 0],[width-1, 0],[width-1, height-1]], dtype="float32")M = cv2.getPerspectiveTransform(src_pts, dst_pts)# 应用变换warped = cv2.warpPerspective(img, M, (width, height))return warped

五、常见问题解决方案

5.1 轮廓断裂问题

  • 原因:边缘检测不连续
  • 改进方案:
    # 形态学闭运算
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
    closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
    

5.2 噪声轮廓过滤

# 面积过滤+长宽比筛选
valid_contours = []
for cnt in contours:area = cv2.contourArea(cnt)if area < 500: continuex,y,w,h = cv2.boundingRect(cnt)aspect_ratio = w / float(h)if 0.8 < aspect_ratio < 1.2:valid_contours.append(cnt)

六、性能优化建议

  1. 多尺度处理:构建图像金字塔进行分层检测
  2. 并行计算:使用cv2.setNumThreads()加速轮廓查找
  3. 内存优化:对大型图像使用ROI区域检测

七、扩展应用方向

  • 工业缺陷检测(结合轮廓分析)
  • 医学图像分析(器官轮廓提取)
  • 增强现实(实时轮廓跟踪)

通过本文的学习,您已掌握从基础边缘检测到复杂轮廓分析的全流程技术。建议通过实际项目(如车牌识别、文档扫描)巩固知识,重点关注参数调优与异常处理能力。完整代码已上传至GitHub(链接),欢迎Star与Issue交流。

相关文章:

Python cv2边缘检测与轮廓查找:从理论到实战

在计算机视觉领域&#xff0c;边缘检测与轮廓查找是图像分析的核心技术。本文将结合OpenCV库&#xff08;cv2模块&#xff09;&#xff0c;从理论原理到代码实战&#xff0c;系统讲解如何通过Python实现这两个关键操作。 一、基础概念解析 1.1 边缘检测的本质 边缘是图像中灰…...

5月7日星期三今日早报简报微语报早读

5月7日星期三&#xff0c;农历四月初十&#xff0c;早报#微语早读。 1、1101名优秀运动员拟保送&#xff0c;全红婵、黄雨婷、盛李豪在列&#xff1b; 2、世界羽联主席巴达玛&#xff1a;中国组织赛事的能力无与伦比&#xff1b; 3、中国首位、亚洲首位&#xff01;赵心童夺…...

智慧医院的可视化变革:可视化工具助力数字化转型

在科技飞速发展的当下&#xff0c;智慧医院已从概念逐步落地&#xff0c;深刻改变着传统医疗模式。它借助互联网、数字孪生及人工智能等前沿技术&#xff0c;在医疗服务领域掀起革新&#xff0c;涵盖面向医务人员的“智慧医疗”、面向患者的“智慧服务”以及面向医院的“智慧管…...

python+open3d选择点云上的某个点并获取其对应三维坐标

👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… ​💫签名:面朝大海,春暖花开! python+open3d选择点云上的某个点并获取其对应三维坐标 1,引言2,效果展示3,点云获取4,程序1,引言 有时候我们只想在点云上获取某个目标的具体坐标,通过程序根据…...

ROS第十三梯:RViz+Marker——自定义几何形状可视化

1)概述 在ROS(Robot Operating System)中,Marker是一种用于在RViz(Robot Visualization)中显示自定义几何形状和注释的工具。Marker是通过visualization_msgs/Marker消息类型发布的。可以在RViz中以各种形式(如点、线、文本、立方体等)显示数据。 2)主要消息格…...

Java高频面试之并发编程-13

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详解原子性、可见性、有序性 在并发编程中&#xff0c;原子性&#xff08;Atomicity&#xff09;、可见性&#xff08;…...

WSL 的 Ubuntu 子系统中启用图形化界面

sudo chmod w /home sudo apt update sudo apt install cifs-utils 1. 选择合适的 X 服务器 在 Windows 系统上&#xff0c;需要安装一个 X 服务器来处理 WSL 中 Ubuntu 的图形显示。常用的 X 服务器有 VcXsrv 和 X410&#xff0c;这里以 VcXsrv 为例&#xff1a; 从VcXsrv 官…...

项目模拟实现消息队列第二天

消息应答的模式 1.自动应答: 消费者把这个消息取走了&#xff0c;就算是应答了&#xff08;相当于没有应答) 2.手动应答: basicAck方法属于手动应答(消费者需要主动调用这个api进行应答) 小结 1.需要实现生产者,broker server&#xff0c;消费者这三个部分的 2.针对生产者和消费…...

MySQL OCP和Oracle OCP怎么选?

近期oracle 为庆祝 MySQL 数据库发布 30 周年&#xff0c;Oracle 官方推出限时福利&#xff1a;2025 年 4 月 20 日至 7 月 31 日期间&#xff0c;所有人均可免费报考 MySQL OCP&#xff08;Oracle Certified Professional&#xff09;认证考试&#xff08;具体可查看MySQL OCP…...

SR触发器为什么能够消抖

SR触发器&#xff08;Set-Reset触发器&#xff09;能够用于**消抖&#xff08;Debounce&#xff09;**&#xff0c;主要是因为它的双稳态特性和对输入信号的锁定能力。机械开关&#xff08;如按键、拨动开关&#xff09;在闭合或断开时&#xff0c;由于金属触点的弹性&#xff…...

2025ISCC练武校级赛部分题解WP

Web 战胜卞相壹 <!-- 路过的酒罐王柯洁九段说&#xff1a; --> <!-- 会叠棋子有什么用&#xff01;你得在棋盘内战胜他&#xff01;我教你个定式&#xff0c;要一直记得&#xff01;一直&#xff01; --> <!-- SGF B[ae];B[ce];B[df];B[cg];B[ag];B[ai];B[ci];…...

Microsoft Azure 在印度尼西亚区域正式上线

微软正式宣布&#xff0c;其首个落地印度尼西亚的云区域——Indonesia Central 已全面上线并正式投入使用&#xff01;这一区域精心设置了三个可用性区&#xff08;Availability Zones&#xff09;&#xff0c;每个可用性区均配备独立的电源、冷却系统以及网络设施&#xff0c;…...

day18 python聚类分析对数据集模型性能影响

聚类后的分析&#xff1a;推断簇的类型 知识点回顾&#xff1a; 推断簇含义的2个思路&#xff1a;先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值 作业&#xff1a;参考示例代码对心脏病数据集采取类似操作&#xff0c;并且评估特征…...

vue3的新特性

vue2 data属性和方法名散落于各个位置&#xff0c;量大了不好找 顺序变了&#xff0c;script在最前面 setup vue3中不用this&#xff0c;setup的执行时期比beforeCreate还要早&#xff0c;所以不要用this setup中写代码的特点 必须要有return&#xff0c;才能在上面使用 什么…...

NX二次开发——BlockUI 弹出另一个BlockUI对话框

最近在研究&#xff0c;装配体下自动导出BOM表格中需要用到BlockUI 弹出另一个BlockUI对话框。通过对网上资料进行整理总结&#xff0c;具体如下&#xff1a; 1、明确主对话框、子对话框1和子对话框2 使用BlockUI创建.cpp和.hpp文件&#xff0c;dlx文件内容如下所示 主对话框…...

《Overlapping Experiment Infrastructure: More, Better, Faster》论文阅读笔记

文章目录 1 背景2 三个核心概念3 Launch层&#xff1a;特性发布的专用机制4 流量分发策略和条件筛选4.1 四种流量分发类型4.2 条件筛选机制 5 工具链与监控体系6 实验设计原则7 培训参考与推荐 1 背景 谷歌&#xff08;Google&#xff09;以数据驱动著称&#xff0c;几乎所有可…...

【Machine Learning Q and AI 读书笔记】- 05 利用数据减少过拟合现象

Machine Learning Q and AI 中文译名 大模型技术30讲&#xff0c;主要总结了大模型相关的技术要点&#xff0c;结合学术和工程化&#xff0c;对LLM从业者来说&#xff0c;是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第5篇&#xff0c;对应原…...

前端面试测试题目(一)

一、Vue的双向绑定机制&#xff08;v-model底层实现原理&#xff09; Vue的双向绑定核心由 响应式系统 和 指令语法糖 共同实现&#xff0c;具体原理如下&#xff1a; 响应式系统 Vue通过数据劫持和依赖收集实现数据变化到视图的同步&#xff1a; • 数据劫持&#xff1a;在Vue…...

最优化方法Python计算:无约束优化应用——线性回归分类器

一、线性回归分类器 假设样本数据为 ( x i , y i ) (\boldsymbol{x}_i, y_i) (xi​,yi​)&#xff0c;其中 i 1 , 2 , … , m i 1, 2, \dots, m i1,2,…,m。标签 y i y_i yi​ 取值于 k k k 个整数 { 1 , 2 , … , k } \{1, 2, \dots, k\} {1,2,…,k}&#xff0c;从而构…...

【汇正自控阀门集团】签约智橙PLM,智橙助泵阀“以国代进”

签约智橙&#xff0c;汇正阀门的“以国代进”举措 随着阀门市场竞争日益激烈、市场需求日益多样化&#xff0c;无论是出口海外、以国代进&#xff0c;还是进军新能源、造船、油气等投资景气的下游市场&#xff0c;阀门企业能否在快速迭代产品、保持技术领先的同时&#xff0c;…...

【macOS】iTerm2介绍

iTerm2 和 iTerm 是 macOS 上两个不同的终端模拟器&#xff0c;虽然名字相似&#xff0c;但它们是两个独立的项目&#xff0c;且 iTerm2 是 iTerm 的现代化继承者。以下是它们的核心区别和演进关系&#xff1a; 1. 历史背景 项目诞生时间状态开发者iTerm2002 年已停止维护Greg…...

2025年五一假期旅游市场新趋势:理性消费、多元场景与科技赋能

2025年五一假期&#xff0c;国内旅游市场再次迎来爆发式增长&#xff0c;官方数据显示&#xff0c;假期期间国内出游人次达3.14亿&#xff0c;游客总消费1802.69亿元。尽管数据规模亮眼&#xff0c;但深入分析可发现&#xff0c;旅游市场正经历结构性变革——消费行为趋于理性、…...

第3章 模拟法

3.1 模拟法概述 模拟法设计思想 模拟法通过将现实问题抽象成计算机可识别的符号与操作&#xff0c;按逻辑顺序“模拟”其过程&#xff0c;从而得到结果&#xff1b;它不依赖复杂公式或高深技巧&#xff0c;只需理清问题背景与实现步骤即可。 示例&#xff1a;鸡兔同笼问题 题…...

16.状态模式:思考与解读

原文地址:状态模式&#xff1a;思考与解读 更多内容请关注&#xff1a;深入思考与解读设计模式 引言 在开发软件系统时&#xff0c;特别是当对象的行为会随着状态的变化而变化时&#xff0c;系统往往会变得复杂。你是否遇到过这样的情况&#xff1a;一个对象的行为在不同的状…...

ActiveMQ 源码剖析:消息存储与通信协议实现(二)

四、KahaDB 消息存储实现细节 &#xff08;一&#xff09;存储原理分析 KahaDB 作为 ActiveMQ 从 5.4 版本开始的默认消息存储引擎&#xff0c;其基于日志文件的存储原理具有独特的设计和优势 。在 KahaDB 的存储目录&#xff08;如${activemq.data}/kahadb&#xff09;下&am…...

明远智睿SD2351核心板:工业AIoT时代的创新引擎

在当今工业互联网飞速发展的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;与物联网&#xff08;IoT&#xff09;的深度融合正以前所未有的态势重塑着传统制造业的格局。从自动化生产线的精准控制到智能仓储的高效管理&#xff0c;从设备运行的实时监测到产品质量的严格…...

iPhone 和 Android 在日期格式方面的区别

整篇文章由iPhone 和 Android 在日期格式方面有所不同引起,大致介绍了,两种时间标准,以及在 JavaScript 下的格式转换方法。 Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 iPhone 和 Android 在日期格式方面有所不同。其中,iPhone(iOS)使…...

使用VSCode在Windows 11上编译运行项目

使用VSCode在Windows 11上编译运行项目 VSCode是一个功能强大的跨平台代码编辑器&#xff0c;可以很好地支持C/C项目开发。以下是使用VSCode在Windows 11上编译运行此项目的详细步骤。 1. 安装VSCode 访问VSCode官网下载并安装VSCode安装完成后&#xff0c;启动VSCode 2. 安…...

边缘计算,运维架构从传统的集中式向分布式转变

在当今数字化时代&#xff0c;边缘计算的崛起正在改变着运维的格局。随着物联网、5G 等技术的快速发展&#xff0c;越来越多的数据和应用正在向边缘设备迁移&#xff0c;这给运维团队带来了新的挑战和机遇。 一、边缘计算崛起带来的运维挑战 边缘计算将计算和数据存储靠近数据…...

【基础篇】prometheus热更新解读

文章目录 本篇内容讲解热更新参数源码解读本篇总结本篇内容讲解 prometheus热更新源码解读 热更新参数 –web.enable-lifecycle : 代表开启热更新配置 修改配置文件发http请求# curl -X POST -vvv localhost:9090/-/reload * About to connect() to localhost port 9090 (…...

为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例

前端设计专栏 使用纯CSS创建简洁名片卡片的学习实践 在这篇技术博客中&#xff0c;我将分享我的前端学习过程&#xff0c;如何使用纯HTML和CSS创建一个简洁美观的名片式卡片&#xff0c;就像我博客首页展示的那样。这种卡片设计非常适合作为个人简介、产品展示或团队成员介绍…...

汽车服务小程序功能点开发

汽车养护服务功能 智能保养预约&#xff1a;根据车辆品牌、型号及行驶里程&#xff0c;自动推荐保养项目&#xff0c;支持线上预约 4S 店或合作维修厂&#xff0c;选择服务时间与地点。故障诊断与维修&#xff1a;车主上传车辆故障现象&#xff0c;系统智能初步诊断&#xff0…...

SENSE2020BSI sCMOS科学级相机主要参数及应用场景

SENSE2020BSI sCMOS科学级相机是一款面向宽光谱成像需求的高性能科学成像设备&#xff0c;结合了背照式&#xff08;Back-Side Illuminated, BSI&#xff09;CMOS技术与先进信号处理算法&#xff0c;适用于天文观测、生物医学成像、工业检测等领域。以下是其核心特点及技术细节…...

《汽车噪声控制》复习重点

题型 选择 填空 分析 计算 第一章 噪声定义 不需要的声音&#xff0c;妨碍正常工作、学习、生活&#xff0c;危害身体健康的声音&#xff0c;统称为噪声 噪声污染 与大气污染、水污染并称现代社会三大公害 声波基本概念 定义 媒质质点的机械振动由近及远传播&am…...

物流无人机结构与载货设计分析!

一、物流无人机的结构与载货设计模块运行方式 1.结构设计特点 垂直起降与固定翼结合&#xff1a;针对复杂地形&#xff08;如山区、城市&#xff09;需求&#xff0c;采用垂直起降&#xff08;VTOL&#xff09;与固定翼结合的复合布局&#xff0c;例如“天马”H型无人机&am…...

docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤

备忘&#xff1a;后续偶尔忘记了docker虚拟机与宿主机的端口映射关系&#xff0c;来这里查看即可&#xff1a; docker run -d \ --name baota \ --privilegedtrue \ -p 8888:8888 \ -p 8880:80 \ -p 8443:443 \ -p 8820:20 \ -p 8821:21 \ -v /home/www:/www/wwwroot \ centos…...

D盘出现不知名文件

各位大佬&#xff0c;电脑D盘去年还干干净净的&#xff0c;后来突然就出现了所圈部分的几个不知名文件&#xff0c;请问这是什么东西&#xff1f;是否可以删除&#xff1f;...

Rust 中 Arc 的深度分析:从原理到性能优化实践

在 Rust 的并发编程中&#xff0c;Arc&#xff08;Atomic Reference Counted&#xff09; 是一个非常关键的智能指针类型&#xff0c;用于在多个线程之间共享数据的所有权。它通过原子操作维护引用计数&#xff0c;确保在多线程环境下安全地管理堆内存资源。然而&#xff0c;很…...

qsort函数

在本篇中&#xff0c;将深入了解qsort函数的用法。 1.qsort函数的基础知识 该函数是用来排序的&#xff0c;这是一个可以直接用来排序数据的库函数&#xff08;#include<stdlib.h>&#xff09;&#xff0c;底层使用的是快速排序的方式。 常见的排序方式有&#xff1a; …...

01 一文了解大数据存储框架:数据库、数据仓库、数据集市、数据网格、数据湖、数据湖仓

1. 大数据存储框架 1.1 定义 数据库&#xff08;Database&#xff09;&#xff1a;数据库是按照数据结构来组织、存储和管理数据的仓库&#xff0c;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据仓库&#xff08;Data Warehouse&#xff…...

QT —— QWidget(2)

QT —— QWidget&#xff08;2&#xff09; windowTitlewindowIconQt 资源系统 (qrc 机制) 详解基本概念使用方法1. 创建 .qrc 文件 设置背景windowOpacity 我们今天继续来学习QWidget&#xff0c;如果大家上一次的博客还没有看过&#xff0c;可以点击这里&#xff1a; https:/…...

微信小程序预览文件 兼容性苹果

uni.request({url: url,method: GET,header: {Authorization: token,responseType: blob,},responseType: "arraybuffer",success: (res) > {uni.hideLoading()const fs wx.getFileSystemManager(); //获取全局唯一的文件管理器let index url.lastIndexOf("…...

QT:qt5调用打开exe程序并获取调用按钮控件实例2025.5.7

为实现在 VS2015 的 Qt 开发环境下打开外部 exe&#xff0c;列出其界面按钮控件的序号与文本名&#xff0c;然后点击包含特定文本的按钮控件。以下是更新后的代码&#xff1a; #include <QCoreApplication> #include <QProcess> #include <QDebug> #include…...

Flink + Kafka 数据血缘追踪与审计机制实战

一、引言 在实时数据系统中,“我的数据从哪来?去往何处?” 是业务方最关心的问题之一。 尤其在以下场景下: 📉 金融风控:模型出现预警,需回溯数据源链路。 🧾 合规审计:监管要求提供数据全流程路径。 🛠 运维排查:Kafka Topic 数据乱序或错发后快速定位来源。 …...

【图书管理系统】详细讲解用户登录:后端代码实现及讲解、前端代码讲解

1. 约定前后端交互接口 [请求] /user/login [参数] userName&password [响应] 登录成功返回–true&#xff1b;登录失败返回–false 2. 后端代码 2.1 后端代码的逻辑 Controller层&#xff1a; &#xff08;1&#xff09;从请求和参数可以得出&#xff0c;前端通过127.0.…...

uni-app实现完成任务解锁拼图功能

界面如下 代码如下 <template><view class"puzzle-container"><view class"puzzle-title">任务进度 {{completedCount}}/{{totalPieces}}</view><view class"puzzle-grid"><viewv-for"(piece, index) in…...

鸿蒙开发——1.ArkTS声明式开发(UI范式基本语法)

鸿蒙开发——1、ArkTS声明式开发:UI范式基本语法 [TOC](鸿蒙开发——1、ArkTS声明式开发:UI范式基本语法)一、ArkTS的基本组成&#xff08;1&#xff09;核心概念&#xff08;像贴标签一样控制组件&#xff09;&#xff08;2&#xff09;基础工具包&#xff08;现成的积木块&am…...

ChatGPT-4o:临床医学科研与工作的创新引擎

技术点目录 2024大语言模型最新进展介绍ChatGPT-4o提示词使用方法与技巧ChatGPT-4o助力临床医学日常生活、学习与工作ChatGPT-4o助力临床医学课题申报、论文选题及实验方案设计ChatGPT-4o助力信息检索、总结分析、论文写作与投稿、专利idea构思与交底书的撰写ChatGPT-4o助力临床…...

Excel点击单元格内容消失

Excel点击单元格内容消失 前言一、原因说明二、解决方案1.菜单栏中找到“审阅”&#xff0c;选择“撤销工作表保护”2.输入密码3.解除成功 前言 Excel想要编辑单元格内容时&#xff0c;无论是单击还是双击单元格内容都莫名其妙的消失了 一、原因说明 单击或者双击Excel中单元…...

单片机-STM32部分:7、GPIO输入 按键

飞书文档https://x509p6c8to.feishu.cn/wiki/RtuVw6GgZiuwyBkxmdDcdsAFnKk 根据原理图&#xff0c;找到KEY1对应的PC3 找到CubeMX中的PC3&#xff0c;设置为GPIO_Input 右击&#xff0c;修改引脚名称为KEY1 或者在GPIO配置属性中修改 引脚模式&#xff1a;这里默认为输入模式&…...