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

Python----计算机视觉处理(Opencv:绘制图像轮廓:寻找轮廓,findContours()函数)

一、轮廓

        轮廓是图像中目标物体或区域的外部边界线或边界区域,由一系列相连的像素构成封闭形状,代表了物体的基本外形。与边缘不同,轮廓是连续的,而边缘则不一定是连续的。

轮廓与边缘的区别:

        轮廓是一组连续的点或线,而边缘不连续。并且边缘更多的是作为图像的特征使用,比如可以用边缘特征来区分脸和手,而轮廓主要用来分析物体的形态,比如物体的周长、面积等 。

轮廓的作用:

1. 形状分析:通过轮廓,可以分析物体的形状,比如是圆形、矩形还是更复杂的形状。

2. 目标识别:在识别特定物体时,轮廓可以作为物体的一个重要特征。

3. 图像分割:利用轮廓,可以将图像分割成多个区域,每个区域代表一个物体或者物体的一个部分。 

二、寻找轮廓

2.1、 RETR_LIST

        表示列出所有的轮廓。并且在hierarchy里的轮廓关系中,每一个轮廓只有前一条轮廓与后一条轮廓的索 引,而没有父轮廓与子轮廓的索引。

2.2、 RETR_EXTERNAL

        表示只列出最外层的轮廓。并且在hierarchy里的轮廓关系中,每一个轮廓只有前一条轮廓与后一条轮廓 的索引,而没有父轮廓与子轮廓的索引。

2.3、 RETR_CCOMP

        表示列出所有的轮廓。并且在hierarchy里的轮廓关系中,轮廓会按照成对的方式显示。

2.4、 RETR_TREE

        表示列出所有的轮廓。并且在hierarchy里的轮廓关系中,轮廓会按照树的方式显示,其中最外层的轮廓 作为树根,其子轮廓是一个个的树枝。

        除此之外还有method参数,该参数有三个选项:

                CHAIN_APPROX_NONE、

                CHAIN_APPROX_SIMPLE、

                CHAIN_APPROX_TC89_L1。

        其中,CHAIN_APPROX_NONE表示将所有的轮廓点都进行存储;CHAIN_APPROX_SIMPLE表示只存储 有用的点,比如直线只存储起点和终点,四边形只存储四个顶点,默认使用这个方法; CHAIN_APPROX_TC89_L1表示使用Teh-Chin链逼近算法进行轮廓逼近。这种方法使用的是Teh-Chin链 码,它是一种边缘检测算法,可以对轮廓进行逼近,减少轮廓中的冗余点,从而更加准确地表示轮廓的 形状。CHAIN_APPROX_TC89_L1是一种较为精确的轮廓逼近方法,适用于需要较高精度的轮廓表示的情 况。

        对于mode和method这两个参数来说,一般使用RETR_EXTERNAL和CHAIN_APPROX_SIMPLE这两个选 项。

三、findContours()函数

        该函数所依据的算法论文名称是:

Topological structural analysis of digitized binary images by border following.

作者是:Satoshi Suzuki

在介绍该算法的实现步骤之前,需要先介绍一些该论文中所用到的符号:

 

frame:框架,一张图片的最上行、最下行、最左列、最右列。

0-pixel:灰度值为0的像素。(背景)

1-pixel:灰度值为1的像素。默认图像是以0-pixel填充,目标图像为1-pixel。(目标物体)

(i, j):表示图像中第i行,第j列的像素点。

f_{i,j}表示像素点(i, j)的灰度值。那么一张图片就可以表示为F={f_{i,j}}

由1像素组成的连通域称为1-component(1连通域),由0像素组成的连通域称为0-component(0连通域)。如果0连通域S包含了frame,那么称S为background(背景),否则称为孔洞。 

borderpoint(边界点):如果一个1像素周围的8连通区域内有0像素存在,那么这个1像素就是一个边界点。边界是由许多的边界点共同组成的。

环绕连通域:在一个二值图中有两个连通域S1和S2,如果S1中任何一个像素点从任何一个方向(4方向)到达frame的路径上都存在S2的像素点,那么就称为S2环绕S1,如果S1环绕S1且S2和S1之间存在边界点,就称为S2直接环绕S1。

外边界和孔边界:假设现有1连通域S1,0连通域S2,如果S2直接环绕S1,则S2和S1之间的边界称为外边界;如果S1直接环绕S2,则S2和S1之间的边缘称为孔边界。

父边界:假设现有1连通域S1和S3,0连通域S2,S2直接环绕S1,S3直接环绕S2,S1与S2之间的边界为B1,S2与S3之间的边界为B2,则B2为B1的父边界。如果S2是background,那么B1的父边界是frame。

光栅扫描(RasterScan):是指从左往右,由上往下,先扫描完一行,再移至下一行起始位置继续扫描。

NBD:从边界开始点以边界跟踪算法可以得到一条边界,为每条新找到的边界B赋予一个新的唯一的编号,NBD表示当前跟踪的边界的编号。

LNBD:在光栅扫描的过程中,我们也保存最近遇到(上一个)的边界B'的编号,记为LNBD。

经过上面的定义后,对于一个二值化图像来说,可以表示为:

四 、绘制图像轮廓

导入模块

import cv2

输入图像

img = cv2.imread('img.png')

灰度化

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

二值化

ret, img_threshold = cv2.threshold(img_gray, 127, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)

寻找轮廓

contours, hierarch = cv2.findContours(img_threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

绘制轮廓

img_contours = cv2.drawContours(img, contours, -1, (0, 0, 255), thickness=2)

输出图像

cv2.imshow('img', img)
cv2.waitKey(0)

完整代码 

import cv2  img = cv2.imread('img.png')  # 将图像从 BGR(蓝绿红)色彩空间转换为灰度。  
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 使用 Otsu 的二值化方法对灰度图像进行二值化处理。  
# ret 返回使用的阈值。  
# img_threshold 是二值化后的图像。  
ret, img_threshold = cv2.threshold(img_gray, 127, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)  # 在二值化图像中寻找轮廓。  
# contours 是一个轮廓列表。  
# hierarch 是轮廓的层级结构。  
contours, hierarch = cv2.findContours(img_threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)  # 在原始图像上绘制轮廓。  
# img 是要绘制轮廓的图像。  
# contours 是要绘制的轮廓列表。  
# -1 表示绘制所有轮廓。  
# (0, 0, 255) 是轮廓的颜色(红色)。  
# thickness=2 是轮廓的粗细。  
img_contours = cv2.drawContours(img, contours, -1, (0, 0, 255), thickness=2)  # 显示带有轮廓的图像。  
cv2.imshow('img', img)  # 等待用户按下按键。  
cv2.waitKey(0)  

 五、库函数

5.1、findContours()

cv.findContours(	image, mode, method[, contours[, hierarchy[, offset]]]	) ->	contours, hierarchy
方法描述
image源,一个 8 位单通道图像。非零像素被视为 1。零像素仍为 0,因此图像被视为 binary 。您可以使用 compare、inRange、threshold、adaptiveThreshold、Canny 等创建灰度或彩色图像的二进制图像。如果 mode 等于 RETR_CCOMP 或 RETR_FLOODFILL,则输入也可以是标签的 32 位整数图像 (CV_32SC1)。
contours检测到的轮廓。每个轮廓都存储为点向量(例如 std::vector<std::vector<cv::P oint> >)。
hierarchy可选的输出向量(例如 std::vector<cv::Vec4i>),包含有关图像拓扑的信息。它的单元数与等值线的数量一样多。对于每个第 i 个轮廓轮廓[i],元素 hierarchy[i][0] 、hierarchy[i][1] 、hierarchy[i][2] 和 hierarchy[i][3] 在同一层次结构级别的下一个和上一个轮廓的轮廓中分别设置为从 0 开始的索引,即第一个子轮廓和父轮廓。如果轮廓 i 没有 next、previous 、parent 或 nested 等值线,则 hierarchy[i] 的相应元素将为负数。
mode等值线检索模式,参见 RetrievalModes
method等值线近似方法,请参阅 ContourApproximationModes
offset每个等值线点移动的可选偏移量。如果轮廓是从图像 ROI 中提取的,然后应该在整个图像上下文中对其进行分析,这将非常有用。
RETR_EXTERNAL

Python:cv.RETR_EXTERNAL

仅检索极端外轮廓。它为所有轮廓设置。hierarchy[i][2]=hierarchy[i][3]=-1

RETR_LIST

Python:cv.RETR_LIST

检索所有等值线,而不建立任何分层关系。

RETR_CCOMP

Python:cv.RETR_CCOMP

检索所有等值线并将它们组织到一个两级层次结构中。在顶层,有组件的外部边界。在第二层,有孔的边界。如果已连接零部件的孔内有其他轮廓,则仍将其置于顶层。

RETR_TREE

Python:cv.RETR_TREE

检索所有等值线并重新构建嵌套等值线的完整层次结构。

RETR_FLOODFILL

Python:cv.RETR_FLOODFILL

CHAIN_APPROX_NONE

Python:cv.CHAIN_APPROX_NONE

绝对存储所有等高线点。也就是说,等值线的任意 2 个后续点 (x1,y1) 和 (x2,y2) 将是水平、垂直或对角线相邻点,即 max(abs(x1-x2),abs(y2-y1))==1。

CHAIN_APPROX_SIMPLE

Python:cv.CHAIN_APPROX_SIMPLE

压缩水平、垂直和对角线段,仅保留其端点。例如,一个直立的矩形轮廓用 4 个点编码。

CHAIN_APPROX_TC89_L1

Python:cv.CHAIN_APPROX_TC89_L1

应用了 Teh-Chin 链近似算法的一种风格 [266]

CHAIN_APPROX_TC89_KCOS

Python:cv.CHAIN_APPROX_TC89_KCOS

应用了 Teh-Chin 链近似算法的一种风格 [266]

5.2、drawContours()

cv.drawContours(	image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]	) ->	image
方法描述
image目标图像。
contours所有输入等值线。每个等值线都存储为点向量。
contourIdx指示要绘制的轮廓的参数。如果为负数,则绘制所有等值线。
color等值线的颜色。
thickness绘制等高线时使用的线条粗细。如果为负数(例如, thickness=FILLED ),则绘制等值线内部
lineType线路连接。请参阅线型
hierarchy有关层次结构的可选信息。仅当您只想绘制部分等值线时才需要它(请参阅 maxLevel )。
maxLevel绘制轮廓的最大级别。如果为 0,则仅绘制指定的轮廓。如果为 1,则函数绘制 contour 和所有嵌套 contour。如果为 2,则函数绘制等值线、所有嵌套等值线、所有嵌套到嵌套的等值线,依此类推。仅当有可用的层次结构时,才会考虑此参数。
offset可选的轮廓偏移参数。将所有绘制的轮廓移动指定

注意

当 thickness=FILLED 时,该函数旨在正确处理具有孔的连通零部件,即使未提供层次结构数据也是如此。这是通过使用奇偶规则一起分析所有轮廓来完成的。如果您有单独检索的轮廓的联合集合,这可能会产生不正确的结果。为了解决这个问题,你需要为每个 contour 的子组单独调用 drawContours,或者使用 contourIdx 参数迭代集合。

相关文章:

Python----计算机视觉处理(Opencv:绘制图像轮廓:寻找轮廓,findContours()函数)

一、轮廓 轮廓是图像中目标物体或区域的外部边界线或边界区域&#xff0c;由一系列相连的像素构成封闭形状&#xff0c;代表了物体的基本外形。与边缘不同&#xff0c;轮廓是连续的&#xff0c;而边缘则不一定是连续的。 轮廓与边缘的区别&#xff1a; 轮廓是一组连续的点或线…...

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python==3.8 opencv-python==4.11.0.86 face_recognition==1.3.0 dlib==19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img = cv2.imread(r"C:\U…...

【测试工具】如何使用 burp pro 自定义一个拦截器插件

在 Burp Suite 中&#xff0c;你可以使用 Burp Extender 编写自定义拦截器插件&#xff0c;以拦截并修改 HTTP 请求或响应。Burp Suite 支持 Java 和 Python (Jython) 作为扩展开发语言。以下是一个完整的流程&#xff0c;介绍如何创建一个 Burp 插件来拦截请求并进行自定义处理…...

51单片机和STM32 入门分析

51单片机和STM32是嵌入式开发中两种主流的微控制器&#xff0c;它们在架构、性能、应用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 1. 51单片机与STM32的定义与特点 51单片机 定义&#xff1a;基于Intel 8051内核的8位微控制器&#xff0c;结构简单…...

python暴力破解html表单

import requests import time# 目标URL url "http://192.168.3.101/pikachu/vul/burteforce/bf_form.php" # 请替换为实际的目标URL# 已知的用户名 username "admin"# 密码字典文件路径 password_file "passwords.txt"# 伪造请求头&#xff…...

DeepSeek+RAG局域网部署

已经有很多平台集成RAG模式&#xff0c;dify&#xff0c;cherrystudio等&#xff0c;这里通过AI辅助&#xff0c;用DS的API实现一个简单的RAG部署。框架主要技术栈是Chroma,langchain,streamlit&#xff0c;答案流式输出&#xff0c;并且对答案加上索引。支持doc,docx,pdf,txt。…...

流影---开源网络流量分析平台(一)(小白超详细)

目录 流影介绍 一、技术架构与核心技术 二、核心功能与特性 流影部署 流影介绍 一、技术架构与核心技术 模块化引擎设计 流影采用四层模块化架构&#xff1a;流量探针&#xff08;数据采集&#xff09;、网络行为分析引擎&#xff08;特征提取&#xff09;、威胁检测引擎&…...

在IDEA中快速注释所有console.log

在IDEA中快速注释所有console.log 在前端IDEA中&#xff0c;快速注释所有console.log语句可以通过以下步骤实现2&#xff1a; 打开要修改的文件。使用快捷键CtrlF打开搜索框。点击打开使用正则搜索的开关或者通过AltR快捷键来打开。在搜索框输入[]*console.log[]*&#xff0c;…...

python全栈-前端

python全栈-前端 文章目录 HTML标签段落p、换行br、水平线hr图片img路径src超文本链接a超链接之锚点href#id文本有序列表ol无序列表ul自定义列表表格table表格属性单元格合并 表单Forminput标签HTML5新增type属性HTML5新增常用属性 实体字符块元素与行内元素/内联元素容器元素d…...

基于PySide6与pycatia的CATIA绘图文本批量处理工具开发实践

引言 在CAD软件二次开发领域&#xff0c;CATIA的自动化处理一直存在开发门槛高、接口复杂等痛点。本文基于Python生态&#xff0c;结合PySide6 GUI框架与pycatia接口库&#xff0c;实现了一套高效的绘图文本批量处理工具。该工具支持背景视图文本批量处理和交互式文本选择处理…...

Jenkins 集成 SonarQube 代码静态检查使用说明

环境准备 Jenkins 服务器 确保 Jenkins 已安装并运行&#xff08;推荐 LTS 版本&#xff09;。安装插件&#xff1a; SonarQube Scanner for Jenkins&#xff08;用于集成 SonarQube 扫描&#xff09;NodeJS Plugin&#xff08;可选&#xff0c;用于 JavaScript 项目&#xff0…...

pytorch构建线性回归模型

仅仅用于自己记录pytorch学习记录 线性回归模型 &#xff08;1&#xff09;准备数据集 数据&#xff1a;三个数据x[x1,x2,x3] y[y1,y2,y3] import torch #线性回归&#xff0c;我们使用三组数据&#xff0c;分别是&#xff08;1,2&#xff09;&#xff0c;&#xff08;2,4&a…...

本地部署 LangManus

本地部署 LangManus 0. 引言1. 部署 LangManus2. 部署 LangManus Web UI 0. 引言 LangManus 是一个社区驱动的 AI 自动化框架&#xff0c;它建立在开源社区的卓越工作基础之上。我们的目标是将语言模型与专业工具&#xff08;如网络搜索、爬虫和 Python 代码执行&#xff09;相…...

skynet网络包库(lua-netpack.c)的作用解析

目录 网络包库&#xff08;lua-netpack.c&#xff09;的作用解析1. 数据包的分片与重组2. 网络事件处理3. 内存管理4. 数据打包与解包 动态库&#xff08;.so&#xff09;在 Lua 中的使用1. 编译为动态库2. Lua 中加载与调用(1) 加载模块(2) 核心方法(3) 使用示例 3. 注意事项 …...

XXL-Job 二次分片是怎么做的?有什么问题?怎么去优化的?

XXL-JOB二次分片机制及优化策略 二次分片实现原理 XXL-JOB的二次分片是在分片广播策略的基础上&#xff0c;由开发者自行实现的更细粒度数据拆分。核心流程如下&#xff1a; 初次分片&#xff1a;调度中心根据执行器实例数量&#xff08;总分片数n&#xff09;分配分片索引i&…...

零基础本地部署 ComfyUI+Flux.1 模型!5 分钟搭建远程 AI 绘图服务器(保姆级教程)

文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址 7. 固定远程访问公网地址 前言 在如今这 AI 技术一路火花带闪电、疯狂往前冲的时代&#xff0c;图像生成模型那可不再是…...

ABC398题解

A 算法标签: 模拟 #include <iostream> #include <algorithm> #include <cstring>using namespace std;const int N 110;int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int n;cin >> n;string res;if (n % 2) {int mid n / 2;f…...

数据通信——计算机基础

通信系统的组成 通信系统是指从一个地方向另外一个地方传递和交换信息&#xff0c;实现信息传递所需的一切技术设备和传输媒体的总和。通信系统一般由信源、发送设备、信道、接收设备、信宿以及噪声源组成&#xff0c;以下是各部分的具体介绍&#xff1a; 信源 信源是产生各…...

量子计算与人工智能的融合:下一代算力革命

1. 引言&#xff1a;算力需求的飞速增长与量子计算的潜力 在信息技术飞速发展的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;从智能助手到自动驾驶&#xff0c;再到医疗诊断&#xff0c;AI 的应用场景日益广泛。然而&#xf…...

神经网络解决非线性二分类

这份 Python 代码实现了一个简单的神经网络&#xff0c;用于解决复杂的非线性二分类问题。具体步骤包含生成数据集、定义神经网络模型、训练模型、测试模型以及可视化决策边界。 依赖库说明 python import numpy as np import matplotlib.pyplot as plt from sklearn.datase…...

nuxt3网站文章分享微信 ,QQ功能

1.安装 npm install qrcode --save-dev 2.组件使用 <div class"share"><div style"line-height: 69px; color: #fff;width: 100px;"><p style"text-align: center;">分享:</p></div><div click"shareToMi…...

深入理解Spring框架:核心概念与组成剖析

引言 在Java企业级开发领域&#xff0c;Spring框架无疑是当之无愧的王者。自2003年首次发布以来&#xff0c;Spring凭借其强大的功能、高度的灵活性和卓越的扩展性&#xff0c;已成为构建大型企业应用程序的首选框架。本文将深入探讨Spring框架的核心概念与多样组成部分&#…...

Ubuntu22.04美化MacOS主题

安装Tweaks 参考Ubuntu 22.04 桌面美化成Mac风格这篇更好点 sudo apt install gnome-tweaks gnome-shell-extensions -y安装macos主题 git clone https://github.com/vinceliuice/WhiteSur-gtk-theme.git # 进到文件目录 ./install.sh -t all -N glassy sudo ./tweaks.sh -g…...

MySQL: 创建两个关联的表,用联表sql创建一个新表

MySQL: 创建两个关联的表 建表思路 USERS 表&#xff1a;包含用户的基本信息&#xff0c;像 ID、NAME、EMAIL 等。v_card 表&#xff1a;存有虚拟卡的相关信息&#xff0c;如 type 和 amount。关联字段&#xff1a;USERS 表的 V_CARD 字段和 v_card 表的 v_card 字段用于建立…...

JavaScript 中for...in和for...of循环的原理区别,在遍历对象和数组时分别如何使用

大白话JavaScript 中for…in和for…of循环的原理区别&#xff0c;在遍历对象和数组时分别如何使用 嘿&#xff0c;朋友&#xff01;咱来唠唠 JavaScript 里 for...in 和 for...of 这两种循环的事儿。它们就像是两个不同的小帮手&#xff0c;能帮你在对象和数组里溜达溜达&…...

图解AUTOSAR_SWS_WatchdogInterface

AUTOSAR Watchdog Interface (WdgIf) 详解 AUTOSAR经典平台看门狗接口模块技术详解 目录 1. 概述 1.1 WdgIf模块的作用1.2 WdgIf在AUTOSAR中的位置2. 架构设计 2.1 WdgIf架构概览2.2 接口设计2.3 序列设计3. 配置详解 3.1 配置参数3.2 配置结构3.3 配置类型4. 总结 4.1 主要特点…...

快速搭建yolo测试环境,超简明的神经网络训练说明书

1 快速搭建yolo测试环境 相对于更早的版本&#xff0c;v5是比较舒服的&#xff0c;直接把仓库拉下来就行&#xff0c;不用单独搞测试脚本和权重文件 $ git clone https://github.com/ultralytics/yolov5.git然后就是切到目录下安装依赖的第三方库&#xff1a; $ cd yolov5 $…...

如何在IDEA中借助深度思考模型 QwQ 提高编码效率?

通义灵码上新模型选择功能&#xff0c;不仅引入了 DeepSeek 满血版 V3 和 R1 这两大 “新星”&#xff0c;Qwen2.5-Max 和 QWQ 也强势登场&#xff0c;正式加入通义灵码的 “豪华阵容”。开发者只需在通义灵码智能问答窗口的输入框中&#xff0c;单击模型选择的下拉菜单&#x…...

探索 Ollama:开源大语言模型平台的无限可能​

在人工智能的快速发展进程中&#xff0c;大语言模型扮演着至关重要的角色。Ollama 作为一个开源的大语言模型平台&#xff0c;正逐渐崭露头角&#xff0c;为广大开发者和爱好者带来了全新的体验。它允许用户在本地环境中轻松地运行、创建和共享大型语言模型&#xff0c;极大地降…...

clickhouse多条件查询

安装包 infi.clickhouse-orm 2.1.3建表 create table test.test (name String,age UInt32,birthday Date32,sex UInt8 ) engineMergeTree() order by (name,sex)insert into test.testvalues (aa,34,1991-01-19,1), (cc,30,1994-01-19,0), (haha,31,1994-02-19,0);多条件查询…...

信息的度量

系列文章目录 文章目录 系列文章目录一、离散消息的信息量1.自信息的引入2.自信息定义 二、离散信源的平均信息量---信息熵1.信息熵定义 一、离散消息的信息量 1.自信息的引入 通信的本质是传递信息&#xff0c;为了定量表征信息的度量&#xff0c;引入自信息量的概念。事件包…...

ffmpeg+QOpenGLWidget显示视频

​一个基于 ‌FFmpeg 4.x‌ 和 QOpenGLWidget的简单视频播放器代码示例&#xff0c;实现视频解码和渲染到 Qt 窗口的功能。 1&#xff09;ffmpeg库界面&#xff0c;视频解码支持软解和硬解方式。 硬解后&#xff0c;硬件解码完成需要将数据从GPU复制到CPU。优先采用av_hwf…...

从零开始实现 C++ TinyWebServer 项目总览

文章目录 引言Web Server 概念如何实现高性能 WebServer&#xff1f;基础网络通信I/O 多路复用技术并发处理事件处理模式其他优化策略&#xff08;未实现&#xff09; 主要功能模块BufferLogSqlConnectPoolHttpRequestHttpResponseHttpConnectHeapTimerWebServer 引言 TinyWeb…...

opencv无法读取的图像,利用pil和numpy进行修复

代码总结 这段代码的功能是遍历指定文件夹下的所有图像文件&#xff0c;并修复可能存在的格式问题&#xff0c;然后覆盖原图像。 代码解析 设置输入文件夹路径&#xff08;input_folder&#xff09;。遍历文件夹中的所有文件&#xff0c;筛选出 .jpg、.jpeg、.png、.webp 格式…...

Redis分布式寻址算法

分布式寻址算法是分布式系统中用于确定数据应该存储在哪个节点的算法。这些算法对于实现高效的数据存取、负载均衡和系统扩展性至关重要。以下是几种常见的分布式寻址算法的解释&#xff1a; 1. Hash 算法 原理&#xff1a;通过哈希函数将数据的键&#xff08;Key&#xff09…...

CUDA 学习(1)——GPU 架构

典型 CPU 架构与 GPU 架构对比&#xff1a; 上图中绿色部分是计算单元&#xff0c;GPU 有更多的计算核心&#xff0c;计算能力更强。黄色部分是控制单元&#xff0c;CPU 中有大量的控制单元&#xff0c;现代 CPU 的晶体管越来越复杂&#xff0c;除了计算&#xff0c;还要实现乱…...

5个视角、5等级及10档次:《数字化转型领域 参考架构》国家标准正式出台

近日&#xff0c;国家标准GB/T 45341-2025《数字化转型管理 参考架构》正式出台。这是我国研制的首个数字化转型领域基础架构类国家标准&#xff0c;对数字化转型领域标准化建设具有重大意义。 关注WeChat Subscription Account【智慧城市指北】&#xff0c;回复关键字“20250…...

2.4 隐函数及由参数方程确定的函数求导

1.隐函数求导 1.1 例题 2. 参数方程确定的函数求导...

PROE 与 STL 格式转换:开启 3D 打印及多元应用的大门

在 3D 设计与制造的复杂生态中&#xff0c;将 PROE 格式转换为 STL 格式绝非无端之举&#xff0c;而是有着深厚且多元的现实需求作为支撑。 一、文件格式介绍​ &#xff08;一&#xff09;PROE 格式​ PROE 作为一款参数化设计软件&#xff0c;采用基于特征的参数化建模技术…...

【Bug记录】node-sass安装失败解决方案

【Bug记录】node-sass 安装失败解决办法 前言 很多小伙伴在安装 node-sass 的时候都失败了&#xff0c;主要的原因是 node 版本和项目依赖的 node-sass 版本不匹配。 解决方案 解决方案&#xff1a;把项目中的 node-sass 替换为 sass&#xff0c;其实 node-sass 已被官方弃…...

三、Python高级特性

Python中的高级数据结构&#xff1a;队列、栈、双端队列、堆与优先队列 在Python编程中&#xff0c;高级数据结构为我们提供了强大而灵活的工具来处理各种复杂的数据存储和操作需求。本文将详细介绍队列、栈、双端队列、堆与优先队列这几种常见的高级数据结构及其在Python中的…...

使用 OpenCV 拼接进行图像处理对比:以形态学操作为例

图像处理在计算机视觉中起着至关重要的作用&#xff0c;而 OpenCV 作为一个强大的图像处理库&#xff0c;提供了丰富的函数来实现各类图像处理任务。形态学操作&#xff08;Morphological Operations&#xff09;是其中常用的技术&#xff0c;尤其适用于二值图像的处理。常见的…...

OPENCV数字识别(非手写数字/采用模板匹配)

这篇文章的重点在于 模板匹配 的使用。模板匹配是计算机视觉中的一项基本技术&#xff0c;它通过比对输入图像与模板图像的相似度&#xff0c;来进行目标识别。对于数字识别&#xff0c;特别是标准数字的识别&#xff0c;模板匹配非常有效。 请看效果&#xff1a; 文章结构 …...

【STM32】知识点介绍一:硬件知识

文章目录 一、电源引脚简介二、电平信号三、电路分析 一、电源引脚简介 VCC、GND、VDD和VSS是电子电路中常见的术语&#xff0c;代表着不同的电源引脚或电压。 VCC&#xff08;Voltage at the Common Collector&#xff09;&#xff1a;VCC是指集电极&#xff08;Collector&am…...

基于SpringBoot的电影售票系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

记录我的ICME2025论文之旅:困顿与收获

人生第一次中B会&#xff0c;还是在课业繁重的大三上&#xff08;有点说法~&#xff09; “在最黑暗的时刻&#xff0c;总有一束光为你指引前行。” ——记录这段难忘的历程 今年的ICME投稿量创下新高&#xff0c;录取率却跌至20多%&#xff0c;并且首次加入了rebuttal&#xf…...

FreeRTOS学习(九):中断管理

FreeRTOS学习&#xff08;九&#xff09;&#xff1a;中断管理 文章目录 FreeRTOS学习&#xff08;九&#xff09;&#xff1a;中断管理前言一、中断优先级分组设置特点中断优先级分组设置 二、FreeRTOS中断优先级配置PendSV和SysTick中断优先级配置 三、中断相关寄存器PRIMASK…...

07-项目中应提前准备下一阶段计划

在项目当前版本的功能开发任务都完成之后&#xff0c;人就空出来了&#xff0c;通常这个时候&#xff0c;项目负责人还有很多繁琐的工作要做&#xff0c;比如项目内部验收、提交测试申请和版本发布等等。为了给项目成员找事情做&#xff0c;就匆匆忙忙安排下个版本的任务&#…...

【C语言】多进程/多线程

【C语言】多进程/多线程 参考链接多进程/多线程服务器1. 多进程服务器2. 多线程服务器 结语参考链接 参考链接 c 中文网 菜鸟 c 多进程/多线程服务器 多进程和多线程是常用的并发编程技术。它们都允许程序同时执行多个任务&#xff0c;提高了系统的资源利用率和程序的运行效率…...

GaussDB数据库表设计与性能优化实践

GaussDB分布式数据库表设计与性能优化实践 引言 在金融、电信、物联网等大数据场景下&#xff0c;GaussDB作为华为推出的高性能分布式数据库&#xff0c;凭借其创新的架构设计和智能优化能力&#xff0c;已成为企业核心业务系统的重要选择。本文深入探讨GaussDB分布式架构下的…...