OpenCV计算机视觉 06 图像轮廓检测(轮廓的查找、绘制、特征、近似及轮廓的最小外接圆外接矩形)
目录
图像轮廓检测
轮廓的查找
轮廓的绘制
轮廓的特征
面积
周长
根据面积显示特定轮廓
轮廓的近似
给定轮廓的最小外接圆、外接矩形
外接圆
外接矩形
图像轮廓检测
轮廓的查找
API函数
image, contours, hierarchy = cv2.findContours(img, mode, method)
代入参数含义:
img:需要实现轮廓检测的原图
mode: 轮廓的检索模式,主要有四种方式:
cv2.RETR_EXTERNAL:只检测外轮廓,所有子轮廓被忽略
cv2.RETR_LIST:检测的轮廓不建立等级关系,所有轮廓属于同一等级
cv2.RETR_CCOMP:返回所有的轮廓,只建立两个等级的轮廓。一个对象的外轮廓为第1级组织结构。
而对象内部中空洞的轮廓为第2级组织结构,空洞中的任何对象的轮廓又是第 1 级组织结构。
-> cv2.RETR_TREE:返回所有的轮廓,建立一个完整的组织结构的轮廓。
method:轮廓的近似方法,主要有以下两种:
-> cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。
cv2.CHAIN_APPROX_SIMPLE:压缩模式,只保留该方向的终点坐标,
例如一个矩形轮廓只需4个点来保存轮廓信息。
返回值
image:返回处理的原图
contours:包含图像中所有轮廓的list对象。
其中每一个独立的轮廓信息以边界点坐标(x,y)的形式储存在numpy数组中。
hierarchy:轮廓的层次结构。一个包含4个值的数组:[Next, Previous, First Child, Parent]
Next:与当前轮廓处于同一层级的下一条轮廓
Previous:与当前轮廓处于同一层级的上一条轮廓
First Child:当前轮廓的第一条子轮廓
Parent:当前轮廓的父轮廓
注意:做轮廓检测前需要将图片读取为二值数据,即像素值只为0和255。
获取给定图像phone.png中物体的轮廓信息,包括轮廓的数量和层次结构,以便进行后续的图像处理。
import cv2
# 读取原图
phone = cv2.imread('phone.png')
# 对原图进行灰度处理
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
# 对灰度图进行阈值处理,得到二值图像
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)
# 查找二值图像中的轮廓
_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 打印轮廓的层次结构
print(hierarchy)
# 打印轮廓的数量
print(len(contours))
输出信息解读
输出的
hierarchy
是一个包含了轮廓之间关系信息的数组。其中每个子数组[6 -1 1 -1]
等代表了一个轮廓的相关信息:
第一个数字(如 6、2、3 等)表示下一个同级轮廓的索引。
第二个数字(如 -1)表示前一个同级轮廓的索引。
第三个数字(如 1、-1 等)表示第一个子轮廓的索引。
第四个数字(如 -1)表示父轮廓的索引。
输出的
9
表示检测到的轮廓数量。
轮廓的绘制
API函数
cv2.drawContours(image, contours, contourIdx, color, thickness=None,lineType=None, hierarchy=None, maxLevel=None, offset=None)
参数含义
image:要在其上绘制轮廓的输入图像。
contours:轮廓列表,通常由cv2.findContours()函数返回。
contourIdx:要绘制的轮廓的索引。如果为负数,则绘制所有轮廓。 -1 color:轮廓的颜色,以BGR格式表示。例如,(0, 255, 0)表示绿色。
thickness:轮廓线的粗细。默认值为1。
lineType:轮廓线的类型。默认值为cv2.LINE_8。
hierarchy:轮廓层次结构。通常由cv2.findContours()函数返回。
maxLevel:绘制的最大轮廓层级。默认值为None,表示绘制所有层级。 offset:轮廓点的偏移量。默认值为None。
绘制出刚刚的phone.png图像中的轮廓
# 读取原图
phone = cv2.imread('phone.png')
# 对原图进行灰度处理
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
# 对灰度图进行阈值处理,得到二值图像
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)
# 查找二值图像中的轮廓
_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 复制原始图像
image_copy = phone.copy()
# 在复制的图像上绘制轮廓
image_copy = cv2.drawContours(image=image_copy, contours=contours, contourIdx=-1, color=(0, 255, 0), thickness=3)
# 显示绘制了轮廓的图像,窗口标题为'Contours_show'
cv2.imshow('Contours_show', image_copy)
# 等待用户按键,参数 0 表示无限等待
cv2.waitKey(0)
轮廓的特征
面积
API函数
cv2.contourArea(contour[, oriented])
参数含义
contour:顶点构成的二维向量组(如轮廓列表contours中的一个轮廓)
oriented:定向区域标志,默认值为 False,返回面积的绝对值,
Ture 时则根据轮廓方向返回带符号的数值
周长
API函数
arcLength(InputArray curve, bool closed)
参数含义
curve:输入的二维点集(轮廓顶点),可以是 vector 或 Mat 类型。
closed:用于指示曲线是否封闭。
问题:1. 求上述例子中 contours
列表中第一个和第二个轮廓的面积,并打印出这两个面积的值。
2. 计算 contours 列表中第一个封闭的轮廓的周长并打印
import cv2
# 读取原图
phone = cv2.imread('phone.png')
# 对原图进行灰度处理
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
# 对灰度图进行阈值处理,得到二值图像
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)
# 查找二值图像中的轮廓
_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 计算 contours 列表中第一个轮廓的面积,并将结果存储在 area_0 变量中
area_0 = cv2.contourArea(contours[0])
# 计算 contours 列表中第二个轮廓的面积,并将结果存储在 area_1 变量中
area_1 = cv2.contourArea(contours[1])
# 打印第一个和第二个轮廓的面积
print(area_0,area_1)
# 计算 contours 列表中第一个轮廓的周长
length = cv2.arcLength(contours[0], closed=True)
# 打印第一个轮廓的周长
print(length)
根据面积显示特定轮廓
绘制出上述案例中面积大于10000的轮廓
import cv2
# 读取原图
phone = cv2.imread('phone.png')
# 对原图进行灰度处理
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
# 对灰度图进行阈值处理,得到二值图像
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)
# 查找二值图像中的轮廓
_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 创建一个空列表用于存储面积大于 10000 的轮廓
a_list = []
# 遍历 contours 中的每个轮廓
for i in range(len(contours)):# 如果当前轮廓的面积大于 10000if cv2.contourArea(contours[i]) > 10000:# 将该轮廓添加到 a_list 列表中a_list.append(contours[i])
# 复制原始图像
image_copy = phone.copy()
# 在复制的图像上绘制面积大于 10000 的轮廓
image_copy = cv2.drawContours(image=image_copy, contours=a_list, contourIdx=-1, color=(0, 255, 0), thickness=3 )
# 显示绘制了特定轮廓的图像,窗口标题为'Contours_show_10000'
cv2.imshow('Contours_show_10000', image_copy)
# 等待用户按键
cv2.waitKey(0)
轮廓的近似
API函数
approx = cv2.approxPolyDP(curve, epsilon, closed)
参数含义:
curve:输入轮廓。
epsilon:近似精度,即两个轮廓之间最大的欧式距离。该参数越小,得到的近似结果越接近实际轮廓;
反之,得到的近似结果会更加粗略。
closed:布尔类型的参数,表示是否封闭轮廓。
如果是 True,表示输入轮廓是封闭的,近似结果也会是封闭的;
否则表示输入轮廓不是封闭的,近似结果也不会是封闭的。
返回值:
approx:近似结果,是一个ndarray数组,为1个近似后的轮廓,包含了被近似出来的轮廓上的点的坐标
import cv2
# 读取图像'phone.png'
phone = cv2.imread('phone.png')
# 将图像转换为灰度图
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
# 对灰度图进行二值化处理
ret,phone_thresh = cv2.threshold(phone_gray,120,255,cv2.THRESH_BINARY)
# 获取二值化图像的轮廓
_,contours, hierarchy = cv2.findContours(phone_thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 设置近似精度
epsilon = 0.01 * cv2.arcLength(contours[0],True)
# 对第一个轮廓进行近似
approx = cv2.approxPolyDP(contours[0], epsilon, True)
# 复制原始图像
phone_new = phone.copy()
# 在复制的图像上绘制近似后的轮廓
image_contours = cv2.drawContours(phone_new,[approx],contourIdx=-1,color=(0,255,0),thickness=3)
# 显示原始图像
cv2.imshow('phone',phone)
cv2.waitKey(0)
# 显示绘制了近似轮廓的图像
cv2.imshow('image_contours',image_contours)
cv2.waitKey(0)
给定轮廓的最小外接圆、外接矩形
外接圆
计算API函数
(x,y),r = cv2.minEnclosingCircle(cnt)
输入参数含义:
cnt 指定的轮廓
返回值:
(x,y) 是外接圆的圆心坐标
r 是外接圆的半径。
外接矩形
计算API函数
x,y,w,h = cv2.boundingRect(cnt)
输入参数含义:
cnt 指定的轮廓
返回值:
(x,y) 外接矩形的左上角坐标
w 矩形的宽度
h 矩形的高度
绘制出上述案例中第七个轮廓的最小外接圆与外接矩形
import cv2
# 读取原图
phone = cv2.imread('phone.png')
# 对原图进行灰度处理
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
# 对灰度图进行阈值处理,得到二值图像
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)
# 查找二值图像中的轮廓
_,contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 获取第 7 个轮廓
cnt = contours[6]
# 计算轮廓的外接圆
(x,y),r = cv2.minEnclosingCircle(cnt)
# 绘制外接圆
phone_circle = cv2.circle(phone.copy(),(int(x),int(y)),int(r),(0,255,0),2)
# 显示绘制了外接圆的图像
cv2.imshow('phone_circle',phone_circle)
cv2.waitKey(0)
# 计算轮廓的最小外接矩形
x,y,w,h = cv2.boundingRect(cnt)
# 绘制矩形
phone_rectangle = cv2.rectangle(phone.copy(),(x,y),(x+w,y+h),(0,255,0),2)
# 显示绘制了矩形的图像
cv2.imshow('phone_rectangle',phone_rectangle)
cv2.waitKey(0)
相关文章:
OpenCV计算机视觉 06 图像轮廓检测(轮廓的查找、绘制、特征、近似及轮廓的最小外接圆外接矩形)
目录 图像轮廓检测 轮廓的查找 轮廓的绘制 轮廓的特征 面积 周长 根据面积显示特定轮廓 轮廓的近似 给定轮廓的最小外接圆、外接矩形 外接圆 外接矩形 图像轮廓检测 轮廓的查找 API函数 image, contours, hierarchy cv2.findContours(img, mode, method) 代入参…...
安装完docker后,如何拉取ubuntu镜像并创建容器?
1. 先docker拉取ubuntu镜像 docker search ubuntu #搜索ubuntu 镜像 docker pull ubuntu:22.04 #拉取ubuntu 镜像 docker images #下载完成后,查看已经下载的镜像 docker run --name ubuntu_container -dit ubuntu:22.04 /bin/bash # docker container -l 2.…...
C++中的表达式
文章目录 算数操作符位操作符bitset对象或整型值的使用将位移操作符用作IO 赋值操作符赋值操作符的右结合性赋值操作具有低优先级 自增和自减操作符条件操作符sizeof操作符优先级new和delete表达式类型转换何时发生隐式转换显示转换旧式强制类型转换 C中的表达式由一个或多个操…...
直流无刷电机控制(FOC):电流模式
目录 概述 1 系统框架结构 1.1 硬件模块介绍 1.2 硬件实物图 1.3 引脚接口定义 2 代码实现 2.1 软件架构 2.2 电流检测函数 3 电流环功能实现 3.1 代码实现 3.2 测试代码实现 4 测试 概述 本文主要介绍基于DengFOC的库函数,实现直流无刷电机控制&#x…...
LabVIEW水轮发电机组振动摆度故障诊断
本文介绍了基于LabVIEW的水轮发电机组振动摆度故障诊断系统的设计与实施过程。系统在通过高效的故障诊断功能,实现水轮发电机组的振动、温度等关键指标的实时监控与智能分析,从而提高电力设备的可靠性和安全性。 项目背景 随着电力行业对设备稳定性…...
《暗时间》读书笔记
前言 2003年,刘未鹏在杂志上发表了自己的第一篇文章,并开始写博客。最初的博客较短,也较琐碎,并夹杂着一些翻译的文章。后来渐渐开始有了一些自己的心得和看法。在这8年里,作者平均每个月写1篇博客或更少,…...
【SQL】COUNT()函数 用法详解
COUNT()函数 COUNT函数用法:COUNT ( [ALL | DISTINCT] column | expression | *) ALL关键字指示统计所有值,而DISTINCT关键字强制函数仅对不同的值进行操作。 默认情况下,使用ALL选项。条件表达式 COUNT()函数中条件表达式加 OR null。例如…...
Kafka优势剖析-幂等性和事务
目录 1. 幂等性(Idempotence) 1.1 什么是幂等性? 1.2 幂等性的实现 1.2.1 生产者 ID 和序列号 1.2.2 重复消息检测 1.2.3 幂等性的优势 1.3 幂等性的配置 2. 事务支持(Transactions) 2.1 什么是事务支持&…...
内网穿透的应用-Ubuntu本地Docker部署Leantime项目管理工具随时随地在线管理项目
文章目录 前言1.关于Leantime2.本地部署Leantime3.Leantime简单实用4.安装内网穿透5.配置Leantime公网地址6. 配置固定公网地址 前言 本文主要介绍如何在本地Linux系统使用Docker部署Leantime,并结合cpolar内网穿透工具轻松实现随时随地查看浏览器页面,…...
Python 中的错误处理与调试技巧
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...
使用 NestJS 构建高效且模块化的 Node.js 应用程序,从安装到第一个 API 端点:一步一步指南
一、安装 NestJS 要开始构建一个基于 NestJS 的应用,首先需要安装一系列依赖包。以下是必要的安装命令: npm i --save nestjs/core nestjs/common rxjs reflect-metadata nestjs/platform-express npm install -g ts-node包名介绍nestjs/coreNestJS 框…...
Linux下Qt程序设置system服务开机自启
1、执行 > /home/firefly/.config/lxsession/Lubuntu/autostart2、执行 crontab -e修改 10 * * * * /bin/bash /opt/restart_bluetoothdemo.sh &> /dev/null为 10 * * * * /bin/systemctl restart ble-gw3、执行 vim /etc/systemd/system/ble-gw.service复制下面…...
golang OpcUaClient
实现功能 package mainimport ("fmt""log""opcuaclient/util/plugin/client/opcclient""os""os/signal""syscall" )func main() {OPCUATest()// 监听操作系统信号,阻塞直到接收到信号quit : make(chan…...
福建双色荷花提取颜色
提取指定颜色 HSV双色荷花代码验证 参照《OpenCV图像处理技术》 HSV 要用HSV的色调、饱和度和亮度来提取指定颜色。 双色荷花 农林大学金山校区观音湖 代码 import cv2 import numpy as npimgcv2.imread("./sucai6/hua.jpg") cv2.imshow("SRC",img) h…...
记录一次面试中被问到的问题 (HR面)
文章目录 一、你对公司的了解多少二、为什么对这个岗位感兴趣三、不能说的离职原因四、离职原因高情商回复五、你的核心优势是什么六、你认为你比其他面试候选人的优势是什么七、不要提及情感 一、你对公司的了解多少 准备要点: 在面试前,对公司进行充分…...
解决sublime编译无法输入问题
在使用sublime编译简单的c语言的时候,发现编译过程中,带有scanf的程序,无法正确的输入。 需要提前配置好gcc 和g++ 一、新增配置 新建编译系统文件:C.sublime-build 具体步骤:菜单中选择Tools——Build System——New Build System——保存文件名C.sublime-build ,填写以…...
基于JAVA+SSM的小区物业管理系统
基于JAVASSM的小区物业管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈喽兄弟们&a…...
List-顺序表--2
目录 1、ArrayList 2、ArrayList构造方法 3、ArrayList常见方法 4、ArrayList的遍历 5、ArrayList的扩容机制 6、ArrayList的具体使用 6.1、杨辉三角 6.2、简单的洗牌算法 1、ArrayList 在集合框架中,ArrayList 是一个普通的类,实现了 List 接口…...
Rabbitmq 具体怎么做到削峰的,是丢弃部分消费吗,有的实际场景是不允许丢弃
在高并发场景中,RabbitMQ 可以通过几种策略来实现 削峰(缓解瞬时负载激增),而这些策略并不一定需要丢弃消息。在一些业务场景下,丢弃消息显然是不允许的,因此在这种情况下,可以使用以下方法来确…...
Apache JMeter 压力测试使用说明
文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…...
STM32 拓展 RTC案例1:使用闹钟唤醒待机模式 (HAL库)
需求描述 执行完毕正常代码之后,让MCU进入待机模式,设置闹钟,自动让MCU从待机模式中被唤醒。可以用led点亮熄灭显示是否唤醒。 应用场景:比如设计一个野外温度自动采集的设备,规定每小时采集一次温度,就可…...
Perturbed-Attention Guidance(PAG) 笔记
Self-Rectifying Diffusion Sampling with Perturbed-Attention Guidance Github 摘要 近期研究表明,扩散模型能够生成高质量样本,但其质量在很大程度上依赖于采样引导技术,如分类器引导(CG)和无分类器引导ÿ…...
C#语言的数据库编程
C#语言的数据库编程 在现代软件开发中,数据库是不可或缺的一部分。无论是企业级应用还是个人项目,数据的存储与管理都是程序的核心功能之一。C#作为一种强类型、面向对象的编程语言,广泛应用于Windows平台的开发,尤其是在构建与数…...
FPGA技术的深度理解
目录 引言 FPGA的基本原理 结构组成 工作原理 FPGA的设计流程 设计阶段 编程阶段 实现阶段 FPGA的应用领域 FPGA编程技巧和示例代码 编程技巧 示例代码 结论 引言 FPGA(现场可编程门阵列)是一种可编程的集成电路,它允许用户根据…...
JavaScript语言的学习路线
JavaScript语言的学习路线 引言 JavaScript是一门广泛使用的编程语言,最初为网页添加互动效果而设计。随着技术的发展,JavaScript的应用领域已经从网页开发扩展到了移动应用、桌面应用、服务器端开发等多个领域。掌握JavaScript不仅能够帮助你成为一名…...
关于Mac中的shell
1 MacOS中的shell 介绍: 在 macOS 系统中,Shell 是命令行与系统交互的工具,用于执行命令、运行脚本和管理系统。macOS 提供了多种 Shell,主要包括 bash 和 zsh。在 macOS Catalina(10.15)之前,…...
设计模式学习笔记——结构型模式
文章目录 适配器模式 Adapter适用场景UML 桥接模式 Bridge适用场景UML 组合模式 Composite装饰模式 Decorator外观模式 Facade享元模式 Flyweight代理模式 Proxy 适配器模式 Adapter 适用场景 希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用…...
MySQL之企业面试题:InnoDB存储引擎组成部分、作用
InnoDB存储引擎主要由以下四个组成部分: 1. Buffer Pool(缓冲池) 原理: 缓冲池是InnoDB存储引擎的核心组件之一,用于缓存表的数据页和索引页,减少对磁盘I/O的访问次数。缓冲池中的数据页在事务提交时会根…...
安装MySQL的五种方法(Linux系统和Windows系统)
一.在Linux系统中安装MySQL 第一种方法:在线YUM仓库 首先打开MySQL官网首页 www.mysql.com 找到【DOWNLOADS】选项,点击 下拉,找到 【MySQL Community(GPL) Downloads】 在社区版下载页面中,【 MySQL Yum Repository 】链接为在线仓库安装…...
使用 C++ 实现神经网络:从基础到高级优化
引言 在现代机器学习中,神经网络已经成为最重要的工具之一。虽然 Python 提供了诸如 TensorFlow、PyTorch 等强大的机器学习库,但如果你想深入理解神经网络的实现原理,或者出于某些性能、资源限制的考虑,使用 C 来实现神经网络会是…...
scala代码打包配置(maven)
目录 mavenpom.xml打包配置项(非完整版,仅含打包的内容< build>)pom.xml完整示例(需要修改参数)效果说明 maven 最主要的方式还是maven进行打包,也好进行配置项的管理 以下为pom文件(不要…...
[免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序(高校就业)招聘系统(Springboot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…...
cursor vip
https://cursor.jeter.eu.org?pf7f4f3fab0af4119bece19ff4a4360c3 可以直接复制命令使用git bash执行即可 命令: bash <(curl -Lk https://gitee.com/kingparks/cursor-vip/releases/download/latest/ic.sh) f7f4f3fab0af4119bece19ff4a4360c3 等待执行完成后…...
web作业
作业一 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> </head&g…...
Docker compose 使用 --force-recreate --no-recreate 控制重启容器时的行为【后续】
前情:上一篇实际是让AI工具帮我总结了一下讨论的内容,这里把讨论的过程贴出来,这个讨论是为解决实际问题 前文https://blog.csdn.net/wgdzg/article/details/145039446 问题说明: 我使用 docker compose 管理我的容器࿰…...
Virgo:增强慢思考推理能力的多模态大语言模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
城市生命线安全综合监管平台
【落地产品,有需要可留言联系,支持项目合作或源码合作】 一、建设背景 以关于城市安全的重要论述为建设纲要,聚焦城市安全重点领域,围绕燃气爆炸、城市内涝、地下管线交互风险、第三方施工破坏、供水爆管、桥梁坍塌、道路塌陷七…...
Linux:进程概念、进程状态、进程切换、进程调度、命令行参数、环境变量,进程地址空间
hello,各位小伙伴,本篇文章跟大家一起学习《Linux:进程》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞!!…...
Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
工欲善其事,必先利其器。 学习Python的第一步不要再加收藏夹了!提高执行力,先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python,我们直接进入python官网下载即可 Python 官网:Welcome to Pyt…...
【ASP.NET学习】ASP.NET MVC基本编程
文章目录 ASP.NET MVCMVC 编程模式ASP.NET MVC - Internet 应用程序创建MVC web应用程序应用程序信息应用程序文件配置文件 用新建的ASP.NET MVC程序做一个简单计算器1. **修改视图文件**2. **修改控制器文件** 用新建的ASP.NET MVC程序做一个复杂计算器1.创建模型(…...
在线工具箱源码优化版
在线工具箱 前言效果图部分源码源码下载部署教程下期更新 前言 来自缤纷彩虹天地优化后的我爱工具网源码,百度基本全站收录,更能基本都比较全,个人使用或是建站都不错,挑过很多工具箱,这个比较简洁,非常实…...
网站自动签到
我研究生生涯面临两个问题,一是写毕业论文,二是找工作,这两者又有很大的冲突。怎么解决这两个冲突呢?把python学好是一个路子,因此从今天我要开一个专栏就是学python 其实我的本意不是网站签到,我喜欢在起点…...
python学opencv|读取图像(二十七)使用time()绘制弹球动画
【1】引言 前序已经学习了pythonopencv画线段、圆形、矩形、多边形和文字的相关操作,具体文章链接包括且不限于: python学opencv|读取图像(十八)使用cv2.line创造线段_cv2. 画线段-CSDN博客 python学opencv|读取图像࿰…...
物联网智能项目简述
物联网智能项目 一、物联网智能项目的定义 物联网智能项目是指基于物联网技术(IoT),结合人工智能(AI)、大数据、云计算等先进技术,开发出的具有智能化、自动化、远程监控等功能的项目。物联网(…...
el-table 合并单元格
参考文章:vue3.0 el-table 动态合并单元格 - flyComeOn - 博客园 <el-table :data"tableData" border empty-text"暂无数据" :header-cell-style"{ background: #f5f7fa }" class"parent-table" :span-method"obj…...
SQL语言的函数实现
SQL语言的函数实现 引言 随着大数据时代的到来,数据的存储和管理变得越来越复杂。SQL(结构化查询语言)作为关系数据库的标准语言,其重要性不言而喻。在SQL语言中,函数是一个重要的组成部分,可以有效地帮助…...
细说STM32F407单片机以DMA方式读写外部SRAM的方法
目录 一、工程配置 1、时钟、DEBUG、GPIO、CodeGenerator 2、USART3 3、NVIC 4、 FSMC 5、DMA 2 (1)创建MemToMem类型DMA流 (2)开启DMA流的中断 二、软件设计 1、KEYLED 2、fsmc.h、fsmc.c、dma.h、dma.c 3、main.h…...
Vue 3前端与Python(Django)后端接口简单示例
项目 后端(Django)前端(Vue 3) 后端(Django) 创建Django项目和应用: 确保你已经安装了Django。如果没有安装,可以使用以下命令安装: pip install django创建一个新的Dja…...
前端多语言
前端多语言目前常用i18n实现 一、react 1.安装依赖 npm install react-i18next i18next --save2.创建配置文件 src/i18n config.ts:对 i18n 进行初始化操作及插件配置 en.json:英文语言配置文件 zh.json:中文语言配置文件 config.ts im…...
单片机-直流电机实验
1、ULN2003芯片介绍 ULN2003, 该芯片是一个单片高电压、高电流的达林顿晶体管阵列集成电路。不仅可以用来 驱动直流电机,还可用来驱动五线四相步进电机。支持驱动大功率电器 因为 ULN2003 的输出是集电极开路,ULN2003 要输出高电平࿰…...