python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言
前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为:
python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客
由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大,我们今天就尝试多一些花样,做一次进阶探索。
【2】代码探索
【2.1】同心圆
绘制同心圆的基本思路是,确认好圆心以后,逐个修改半径,然后输出图像即可。
还是以之前的代码为基础,增加for循环逐个输出圆即可。此处先给出完整代码:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
x0=285 #圆心横坐标
y0=285 #圆心纵坐标
for i in range(1,6,1):canvas = cv.circle(canvas, (x0, y0), 50*i, (int(255*np.cos((np.sqrt(np.square(15-i))))), int(255*np.sin(i)), int(np.abs(i-3))^5), i) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
程序运行后的输出图像为:
图1 同心圆
创造同心圆的核心代码段落为:
x0=285 #圆心横坐标
y0=285 #圆心横坐标
for i in range(1,5,1):canvas = cv.circle(canvas, (x0, y0), 50*i, (int(255*np.cos((np.sqrt(np.square(15-i))))), int(255*np.sin(i)), int(np.abs(i-3))^5), i) #输出同心圆
首先用x0和y0确认了愿新的坐标点,然后用for循环输出5个圆形即可。
这五个圆的半径计算式为:r=50*i,i就是圆形的出现顺序;圆的颜色采用了函数的形式,不是此处重点;圆的线宽就是圆出现的顺序。
总体上,圆出现的顺序越晚,半径越大,线条越宽。
【2.2】疏密同心圆
绘制疏密同心圆的基本思路是,利用三角函数的斜率也是三角函数的原理,如果半径通过三角函数来取值,那同样的增量下,邻近半径值的差会周期性的时大时小,这样就会画出疏密同心圆。
以2π为周期,增量从0到7就可以覆盖一个周期内的所有圆。
在这个分析基础上,我们把核心代码换成:
x0=285 #圆心横坐标
y0=285 #圆心横坐标
for i in range(0,7,1):canvas = cv.circle(canvas, (x0, y0), np.abs(int(260*np.cos(i))), (200,180,55), 2) #输出同心圆
半径取值为np.abs(int(260*np.cos(i))),这里的np.abs()是取绝对值的意思,因为半径必须为正数。
此时获得的图形为:
图2 疏密同心圆
对应的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
x0=285 #圆心横坐标
y0=285 #圆心横坐标
for i in range(0,7,1):canvas = cv.circle(canvas, (x0, y0), np.abs(int(260*np.cos(i))), (200,180,55), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.3】变化圆心
既然圆的半径可以变化,圆形自然也可以变化,继续修改核心代码:
r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), r, (200,180,55), 2) #输出同心圆
在这里,圆心坐标被更换为((i-5)*10+280, (i-5)*20+280),这几一个动态值,只有半径是恒定的160。代码运行获得的图像为:
图3 圆心变化
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), r, (200,180,55), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.4】变化圆半径
在圆心变化的基础上,圆的半径可以变化,这样就会出现变化圆。
继续增添代码:
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (200,180,55), 2) #输出同心圆
在这里,半径值被修改为:int(200*np.abs(np.sin(i))),这是一个动态值。
运行后的图像为:
图4 变化圆
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
#r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (200,180,55), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.5】变化圆半径和颜色
在获得变化圆半径的基础上,继续修改代码,让圆的颜色变化:
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))), 2) #输出圆
在这里,颜色值被修改为:(int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))),这是一个动态值。
运行后的图像为:
图5 变化圆半径和颜色
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 225 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 1] = 50 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 150 * np.sin(j - i) # 第二个通道值# 第三个通道值
#for i in range(0, 580, 1):#for j in range(0, 580, 1):#canvas[i, j, 2] = 100 * np.tanh(i + j) + 100 * np.tanh(i - j) + 50 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
#r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【2.6】变化背景
然后我们修改背景BGR值,获得颜色变化的背景画布:
# 第一个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 1] = 150 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 50 * np.sin(j - i) # 第二个通道值# 第三个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 2] = 50 * np.tanh(i + j) + 80 * np.tanh(i - j) + 120 * np.cos(j - i) # 第三个通道值
此时获得的图像为:
图6 变化圆和画布
此时的完整代码为:
import numpy as np # 引入numpy模块
import cv2 as cv # 引入cv模块canvas = np.ones((580, 580, 3), np.uint8) * 125 # 绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
# 第一个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 0] = 0.2 * (i + j) # 第一个通道值# 第二个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 1] = 150 * np.cos(i ^ j) + 55 * np.sin(j ^ i) + 50 * np.sin(j - i) # 第二个通道值# 第三个通道值
for i in range(0, 580, 1):for j in range(0, 580, 1):canvas[i, j, 2] = 50 * np.tanh(i + j) + 80 * np.tanh(i - j) + 120 * np.cos(j - i) # 第三个通道值
#x0=285 #圆心横坐标
#y0=285 #圆心横坐标
#r=160 #半径
for i in range(0,10,1):canvas = cv.circle(canvas, ((i-5)*10+280, (i-5)*20+280), int(200*np.abs(np.sin(i))), (int(abs(255*np.sin(i))),int(abs(255*np.cos(i))),int(255*np.tanh(i))), 2) #输出同心圆#canvas = cv.circle(canvas, (285, 285), 80, (0, 0, 255), 3) # 第一个圆形
#canvas = cv.circle(canvas, (100, 285), 80, (0, 255, 255), -1) # 第二个圆形
#canvas = cv.circle(canvas, (470, 285), 80, (255, 0, 0), -1) # 第三个圆形
# canvas = cv.rectangle(canvas, (50, 30), (530, 550), (155, 120, 60), 5) # 矩形
# canvas = cv.rectangle(canvas, (80, 80), (500, 500), (55, 160, 230), 10) # 矩形
# canvas = cv.rectangle(canvas, (150, 150), (430, 430), (50, 120, 90), -1) # 矩形
# canvas = cv.line(canvas, (50, 550), (550, 550), (58, 50, 150), 15) # 线段
# canvas = cv.line(canvas, (300, 50), (300, 550), (120, 150, 25), 20) # 线段cv.imshow('rectangle', canvas) # 在屏幕展示绘制圆形的效果
cv.imwrite('circle50.png', canvas) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
【3】总结
掌握了python+opencv灵活绘制圆形的技巧。
相关文章:
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
qt QZipReader详解
1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…...
开发场景中Java 集合的最佳选择
在 Java 开发中,集合类是处理数据的核心工具。合理选择集合,不仅可以提高代码效率,还能让代码更简洁。本篇文章将重点探讨 List、Set 和 Map 的适用场景及优缺点,帮助你在实际开发中找到最佳解决方案。 一、List:有序存…...
顶顶通呼叫中心中间件mod_cti模块安全增强,预防盗打风险(mod_cti基于FreeSWITCH)
文章目录 前言联系我们mod_cti版本支持安全加强说明 前言 FreeSWITCH暴露在公网最大的风险就是被不法之人盗打 出现盗打的主要原因以下几点: 分机密码太简单或者密码泄露了拨号方案配置不合理sofia配置错误 所以我们给顶顶通呼叫中心中间件添加了安全加强功能&am…...
bash shell的条件语句
~ script% touch if.sh ~ script% chmod 755 if.sh1.if-then-fi #!/usr/bin/env bashFOOD$1 if [ $FOOD"apple" ] thenecho The food is $FOOD fi exit 0~ script % ./if.sh apple The food is apple如果要将多条语句写在一行,可以…...
拦截器Interceptor与过滤器Filter
拦截器Interceptor 定义: SpringMVC内置拦截机制,允许在请求被目标方法处理的前后进行拦截,执行一些额外操作;比如:权限验证,日志记录,数据共享等。 实现步骤 1、自定义拦截器 Component public class …...
水电站视频智能监控系统方案设计与技术应用方案
一、背景需求 水电站作为国家重要的能源基地,其安全运行对于保障能源供应和社会稳定具有重要意义。然而,传统的人工监控方式存在着诸多问题,如人力成本高、监控范围有限、反应不及时等。因此,水电站急需引进一种先进的视频智能监控…...
教师管理系统
大概功能: 1.显示所有教师 2.按姓名查找教师 3.按工号查找教师 4.增加教师 5.删除教师 6.退出 数据会保存到 txt 文件里面 姓名:必须是中文 手机号码:必须是11位,必须是数字 效果展示: 代码展示: Teache…...
nexus docker安装
#nexus docker 安装 docker pull sonatype/nexus3 mkdir -p /data/nexus-data docker run -itd -p 8081:8081 --privilegedtrue --name nexus3 \ -v /data/nexus-data:/var/nexus-data --restartalways docker.io/sonatype/nexus3 #访问 http://192.168.31.109:8081/ 用户名&am…...
canvas之进度条
canvas之进度条 效果: 封装的组件 <template><div class"circle" :style"{ width: props.radius px, height: props.radius px }"><div class"circle-bg" :style"{ width: props.radius - 5 px, height: pr…...
【ES6复习笔记】Promise对象详解(12)
1. 什么是 Promise? Promise 是 JavaScript 中处理异步操作的一种机制,它可以让异步操作更加容易管理和控制。Promise 对象代表一个异步操作的最终完成或失败,并提供了一种方式来处理操作的结果。 2. Promise 的基本语法 Promise 对象有三…...
前端Python应用指南(五)用FastAPI快速构建高性能API
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计(三)Django vs Flask:哪种框架适…...
c#多线程之生产者-消费者模型
在 C# 中实现 生产者-消费者模式,通常需要多个线程来处理数据的生产和消费。我们可以使用 Queue<T> 来作为存储数据的队列,并使用 Thread、Mutex 或 Monitor 来确保线程安全。BlockingCollection<T> 是 C# 提供的一个线程安全的集合…...
2011-2020年各省城镇职工基本医疗保险年末参保人数数据
2011-2020年各省城镇职工基本医疗保险年末参保人数数据 1、时间:2011-2020年 2、来源:国家统计局 3、指标:省份、时间、城镇职工基本医疗保险年末参保人数 4、范围:31省 5、指标解释:参保人数指报告期末按国家有关…...
Python基础语法知识——列表、字典、元组与集合
列表(list)、字典(dictionary)、元组(tuple)与集合(set)都可以看成存储数据的容器,但是前两者常用,后两者用得相对较少。 目录 1 列表(list) 1.1列表入门 1 列表(list) 1.1列表入门 class1["李白…...
Mysql数据库中,监测某张表中某字段的修改情况(被哪个ip所修改、新老值)
在Mysql数据库中,通过写一个触发器,来监测某张表(q_device)字段(run_status)的改变情况。 【示例】 -- 1. 创建监测日志表 CREATE TABLE change_log (id INT AUTO_INCREMENT PRIMARY KEY,table_name VARCHAR(255),column_name VARCHAR(255),old_value T…...
迁移学习 详解及应用示例
简介: 迁移学习是一种机器学习技术,其核心思想是利用在一个任务上已经学到的知识(源任务:任务已经有一个训练好的模型,然后我们将这个模型的某些部分或知识迁移到一个新的但相关的“目标任务”上。)来帮助解…...
ubuntu控制器多网口配置
在Ubuntu系统中配置多网口,可以通过编辑网络配置文件(Netplan 或旧版 /etc/network/interfaces)实现。这适用于需要管理多个网络接口(如 eth0、eth1 等)的场景,例如负载均衡、网络隔离或多路径通信。 以下…...
接口调用限频(代理模式+滑动窗口)
目录 代码示例 接口 代理 接口实现 限流工厂 限流处理器接口 直接交换处理器 限流处理器 限流配置 滑动窗口限流 通过代理模式滑动窗口,限流请求第三方平台,避免出现第三方平台抛出限流异常,影响正常业务流程,从出口出发…...
FFmpeg在python里推流被处理过的视频流
链式算法处理视频流 视频源是本地摄像头 # codinggbk # 本地摄像头直接推流到 RTMP 服务器 import cv2 import mediapipe as mp import subprocess as sp# 初始化 Mediapipe mp_drawing mp.solutions.drawing_utils mp_drawing_styles mp.solutions.drawing_styles mp_holis…...
2- Linux系统的命令帮助
Linux 命令行帮助信息使用指南 一、引言 对于初学者来说,Linux命令行可能会显得复杂和难以捉摸。然而,一旦掌握了如何有效地利用命令行的帮助信息,您将发现它是一个强大而灵活的工具,可以极大地提高您的工作效率。本指南旨在为新手介绍如何在Linux中获取命令的帮助信息,…...
Mysql事务
一、数据库事务基础 1.1. 什么是事务 简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。 比如 MySQL 原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB…...
Fast adaptively balanced min-cut clustering
#0.论文信息 标题:Fast adaptively balanced min-cut clustering期刊:Pattern Recognition作者: Feiping Nie , Fangyuan Xie , Jingyu Wang ,Xuelong Li机构: China Telecom, Northwestern Polytechnic al University.代码链接: #1.摘要 …...
vue3和springboot使用websocket通信
前端端口:9090 后端端口:8080 vue3 引入依赖: npm install sockjs-client stomp/stompjs vue页面 <template><div><h1>WebSocket 示例</h1><button click"sendMessage">发送消息</button>…...
Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
文章目录 一、Policies二、SizeBasedTriggeringPolicy:基于文件大小的滚动策略2.1、文件达到指定大小就归档 三、TimeBasedTriggeringPolicy:基于时间间隔的滚动策略3.1、验证秒钟归档场景3.2、验证分钟场景3.3、验证小时场景 四、多策略组合使用五、扩展知识5.1、S…...
js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
目录 Proxy Reflect 静态方法 部分实例 Iterator 实际开发迭代器的使用实例 迭代器(Iterator)应用 Generator Proxy Proxy 是 ES6 中新增的对象 Proxy 是JavaScript中的内置对象,它提供了一种机制,可以拦截并自定义各种…...
微信V3支付报错 平台证书及平台证书序列号
1.平台证书及平台证书序列号设置错误报错: 错误1: Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…...
【开发问题记录】执行 git cz 报require() of ES Module…… 错误
文章目录 1、问题2、解决3、参考链接 1、问题 在对 commitizen 进行完,一系列的初始化以后 , 对代码进行 提交 到暂存区,然后要提交到 本地仓库 的报错 然后因为安装了 commitizen 所以是想用 git cz 进行提交的, 执行命令的时候…...
Kubernetes 安装 Nginx以及配置自动补全
部署 Nginx : [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口: [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…...
JS中的闭包和上下文
变量提升 和 函数提升 这里要提到一个提升的概念,即在JS中,在解析代码之前还有一个预处理的过程,这个过程中会把部分变量和函数声明提前到代码的最顶部, 会在其他所有代码之前执行。虽然当我们按照规范(严格模式或者T…...
element-ui表格多级表头固定列和合并单元格
多级表头固定列 代码示例-不能直接运行,仅供参考 <el-table ref"table" class"table":data"list"style"width: 100%":header-cell-style"headerCellStyle"v-loading"dataLoading":span-method&qu…...
视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点
随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展࿰…...
第五十九章 假脱机设备
文章目录 第五十九章 假脱机设备介绍打开和使用假脱机设备用于假脱机设备的 OPEN 和 USE 命令USE 命令 第五十九章 假脱机设备 介绍 IRIS数据平台使能够将打印输出直接发送到您的打印机或屏幕,或将其保留在后台打印中以供以后打印。IRIS 假脱机独立于您的操作系统…...
Maven Wrapper 报错“未找到有效的 Maven 安装”
1. 检查 Maven Wrapper 配置: 确保你的项目中包含 .mvn/wrapper/maven-wrapper.properties 文件。 检查该文件中的 distributionUrl 属性,确保它指向一个有效的 Maven 发行版 URL。 2.确认 Maven Wrapper 脚本存在: 在项目根目录下&#x…...
yarn list --pattern vuex-module-decorators
dgqdgqdeMac-mini spid-admin % yarn list --pattern vuex-module-decorators yarn list v1.22.22 └─ vuex-module-decorators0.16.1 ✨ Done in 0.24s.好的,这段代码是一个典型的 Vuex 模块定义,使用了 vuex-module-decorators 库。这个库为 Vuex 提…...
day19-Linux软件包
科普,什么是代码文件。 电脑程序Program,就是某一个编程语言编写的一个代码文件,里面包含了该语言特有的指令,以及各种字符、符号。 linux自带的network管理脚本,shell脚本 什么是软件程序。 软件程序,就…...
【网络分析工具】WireShark的使用(超详细)
网络分析工具——WireShark的使用 简介WireShark软件安装Wireshark 开始抓包示例WireShark抓包界面WireShark 主要分为这几个界面TCP包的具体内容Wireshark过滤器设置wireshark过滤器表达式的规则Wireshark抓包分析TCP三次握手Wireshark分析常用操作 简介 WireShark是非常流…...
React 高级组件开发:动态逻辑与性能优化
React 高级组件开发:动态逻辑与性能优化 引言一、动态逻辑与配置化组件1. 动态组件的设计 二、自定义 Hooks 解决复杂状态管理1. 自定义 Hook 的优势 三、高阶组件(HOC)模式1. 高阶组件的应用场景 四、性能优化1. 使用 React.memo 优化渲染2.…...
Vue 3 与 Tauri 集成开发跨端APP
1、安装RUST 下载地址:Install Rust - Rust Programming Language 安装: 安装完成后,在命令行里运行: rustup 2、安装 Node.js 与 npm 或 pnpm ,如果已经安装,可以忽略 # 使用 nvm 安装 Node.js 最新版本 nvm install…...
FreeRTOS中xPortPendSVHandler()和vPortSVCHandler()这两个函数的作用
在 FreeRTOS 中,xPortPendSVHandler() 和 vPortSVCHandler() 是两个重要的中断服务例程(ISR),它们负责处理与操作系统相关的异常。这些函数对于实现上下文切换和任务管理至关重要。下面分别解释这两个函数的作用: xPo…...
【RK3588 Linux 5.x 内核编程】-内核IO复用与poll
内核IO复用与poll 文章目录 内核IO复用与poll1、IO复用2、Poll的使用2.1 用户空间程序中使用Poll2.2 在内核空间实现Poll3、驱动程序实现4、用户空间程序实现5、验证让我们假设应用程序想要根据其状态读取/写入许多 IO(输入和输出)的情况。 在这种情况下我们该怎么办? 我们必…...
精选9个自动化任务的Python脚本精选
大家好,我是老邓,今天我们来一起学习如何用Python进行一些常见的自动化操作,涉及文件处理、网络交互等实用技巧。即使你没有任何Python基础也没关系,我会用最通俗易懂的语言来讲解。 1. 对目录中的文件进行排序 import osdef so…...
使用JFLASH批量烧录程序导入生产的简易设置
基于上一篇帖子我们可以把任意厂家的MCU导入jflash来使用 首先,我使用的是V699C版本,目前使用了一段时间没有问题 我尝试过换不同的电路板烧录连续烧录,当单片机里没有程序的时候,问题不大,但是一旦单片机里有程序的话…...
计算机体系结构期末复习1:分支预测
目录 一、为什么需要分支预测 1.存在分支的指令 2.控制相关的处理方式一:stall(阻塞)流水线 二、分支预测方法 1.预测正确与预测错误的性能损失 2.减少预测错误的惩罚 3.提高分支预测的准确度 1)编译时(静态方法ÿ…...
获取页面上所有的img,并保存到本地
浏览器的 JavaScript 环境中受限于安全和隐私原因,不允许直接指定下载文件夹或访问本地文件系统。因此,无法通过纯 JavaScript 在浏览器控制台中实现下载图片到指定文件夹的功能。 然而,您可以使用 Web API 提供的文件系统访问 API 进行一定…...
Day56 图论part06
108.冗余连接 并查集应用类题目,关键是如何把题意转化成并查集问题 代码随想录 import java.util.Scanner;public class Main{public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();DisJoint disjoint = new DisJo…...
深度学习助力股市预测:LSTM、RNN和CNN模型实战解析
作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:众所周知,传统的股票预测模型有着各种各样的局限性。但在我的最新研究中,探索了一些方法来高效预测股市走势,即CNN、RNN和LSTM这些深度学习…...
.NET能做什么?全面解析.NET的应用领域
.NET 是由微软开发的一个开源、跨平台的开发框架。它不仅支持构建各种应用程序,还能运行在不同的操作系统上,包括 Windows、Linux 和 macOS。自从 .NET Core 的推出,.NET 成为了一个现代化的开发平台,能够满足企业和开发者日益多样…...
分布式事务入门 一
分布式事务入门 一 您好,我是今夜写代码,今天学习下分布式事务相关理论,以及常见的解决方案,为后续掌握Seata分布式事务框奠定基础。 为什么需要分布式事务? 分布式事务主要由于存储资源的分布性,通常涉及多个数据库。 分布式…...
华为,新华三,思科网络设备指令
1. 设备信息查看 华为 display version # 查看设备版本信息 display device # 查看设备硬件信息 新华三(H3C) display version # 查看设备版本信息 display device # 查看设备硬件信息 锐捷 show version …...