树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)
本人所用树莓派4B 装载的系统与版本如下:
版本可用命令 (lsb_release -a) 查询:
Opencv 版本是4.5.1:
OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的圆
今日学习的程序主要是为了能够手动微调整好更为适合多变环境的HSV色彩空间
文章提供测试代码讲解,整体代码贴出、测试效果图
目录
实验目的:
实验大致过程视频:
完整实例代码贴出:
代码小结:
代码实验操作与测试结果图:
应用HSV阈值函数 cv2.inRange():
组合HSV阈值 cv2.bitwise_and():
形态学操作函数:(膨胀/腐蚀/开运算/闭运算):
高斯模糊cv2.GaussianBlur():
霍夫圆变换来检测圆形:
网上查阅资料贴出:
实验目的:
实时地从视频流中检测特定颜色范围内的圆形物体。
用户可以通过Trackbars调整HSV颜色阈值来指定要检测的HSV颜色范围。使得程序对特定颜色小球的检测更为准确
检测到的圆形物体将在原始帧上被绘制出来,并根据其大小以不同的颜色和线宽进行区分。此外,如果检测到的圆的半径超过某个阈值(在这里是35),则会设置一个标志(
buzz
)。实验全部过程视频:
OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
完整实例代码贴出:
实时地从视频流中检测特定颜色范围内的圆形物体。
可以通过Trackbars调整HSV颜色阈值来指定要检测圆的颜色范围。
# -*- coding: utf-8 -*- import cv2 import numpy as np import time kernel = np.ones((5,5),np.uint8) # 从网络摄像头获取输入 cap = cv2.VideoCapture(0)time.sleep(0.5)# 将视频尺寸减小到320x240,这样rpi处理速度就会更快 cap.set(3,320) cap.set(4,240)#第一个空回调函数 def nothing(x):pass# 创建一个供以后使用的窗口 cv2.namedWindow('HueComp') cv2.namedWindow('SatComp') cv2.namedWindow('ValComp') cv2.namedWindow('closing') cv2.namedWindow('tracking')# 创建跟踪条的最小和最大的色调,饱和度和价值 # 允许用户实时调整参数值HSV cv2.createTrackbar('hmin', 'HueComp',12,179,nothing) cv2.createTrackbar('hmax', 'HueComp',37,179,nothing)cv2.createTrackbar('smin', 'SatComp',96,255,nothing) cv2.createTrackbar('smax', 'SatComp',255,255,nothing)cv2.createTrackbar('vmin', 'ValComp',186,255,nothing) cv2.createTrackbar('vmax', 'ValComp',255,255,nothing)while(1):buzz = 0#读取帧并转换到HSV空间_, frame = cap.read()hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)hue,sat,val = cv2.split(hsv)#获取Trackbar的当前值hmn = cv2.getTrackbarPos('hmin','HueComp')hmx = cv2.getTrackbarPos('hmax','HueComp')smn = cv2.getTrackbarPos('smin','SatComp')smx = cv2.getTrackbarPos('smax','SatComp')vmn = cv2.getTrackbarPos('vmin','ValComp')vmx = cv2.getTrackbarPos('vmax','ValComp')#应用HSV阈值hthresh = cv2.inRange(np.array(hue),np.array(hmn),np.array(hmx))sthresh = cv2.inRange(np.array(sat),np.array(smn),np.array(smx))vthresh = cv2.inRange(np.array(val),np.array(vmn),np.array(vmx))# 组合HSV阈值 使用按位与操作来组合三个HSV分量的阈值结果,从而得到颜色范围内所有像素的掩码。tracking = cv2.bitwise_and(hthresh,cv2.bitwise_and(sthresh,vthresh))#形态学操作#对掩码进行膨胀、闭操作和高斯模糊,以减少噪声并增强圆形物体的检测。dilation = cv2.dilate(tracking,kernel,iterations = 1)closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)closing = cv2.GaussianBlur(closing,(5,5),0)#使用霍夫圆变换来检测圆形。circles = cv2.HoughCircles(closing,cv2.HOUGH_GRADIENT,2,120,param1=120,param2=50,minRadius=10,maxRadius=0)#绘制检测到的圆形#如果检测到圆形,就在原始帧上绘制它们。根据圆形的半径大小,使用不同的颜色和线宽进行绘制。if circles is not None:x, y, r = circles[0][0]x_p = int(round(x))print (x_p)for i in circles[0,:]:if int(round(i[2])) < 30:cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),int(round(i[2])),(0,255,0),5)cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),2,(0,255,0),10)elif int(round(i[2])) > 35:cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),int(round(i[2])),(0,0,255),5)cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),2,(0,0,255),10)buzz = 1 cv2.imshow('HueComp',hthresh)cv2.imshow('SatComp',sthresh)cv2.imshow('ValComp',vthresh)cv2.imshow('closing',closing)cv2.imshow('tracking',frame)if cv2.waitKey(1) & 0xFF == ord('q'):cap.release()L_Motor.stop()R_Motor.stop()GPIO.cleanup()cv2.destroyAllWindows() breakcap.release() cv2.destroyAllWindows()
代码小结:
1、创建Trackbar
2、始化循环,读取帧并转换到HSV空间
3、获取Trackbar的当前值
4、应用HSV阈值
5、组合HSV阈值
6、形态学操作
7、检测圆形
8、绘制检测到的圆形
9、输出和判断
代码实验操作与测试结果图:
1、使用树莓派的USB摄像头拍摄一张球形物体的图片用于取色获取大致BGR色域范围:
我的颜色范围是:138 67 17
拍摄程序在这篇文章有提到:树莓派4B_OpenCv学习笔记4:测试摄像头_imread加载显示图像_imwrite保存图片_树莓派摄像头怎么保存照片-CSDN博客
2、运行程序将BGR颜色空间转换为HSV:
BGR_HSV转换程序在这篇文章有提到:
树莓派4B_OpenCv学习笔记6:OpenCv识别已知颜色_运用掩膜_树莓派 图像融合-CSDN博客
3、运行本次实验的程序,将TrackBar调整到差不多的HSV范围:
发现如果不进行调整直接运用第二步得到的颜色空间范围,那么将会检测到许多的“圆”:
然后根据HSV窗口展示轮廓,调整它们的最大值与最小值,使其掩膜中的目标圆球轮廓更清晰,而其余噪声点更小:
然后拿远点测试,以及将瓶盖侧放,看是否会误检测为圆:
应用HSV阈值函数 cv2.inRange()
:
#应用HSV阈值
hthresh = cv2.inRange(np.array(hue),np.array(hmn),np.array(hmx))
sthresh = cv2.inRange(np.array(sat),np.array(smn),np.array(smx))
vthresh = cv2.inRange(np.array(val),np.array(vmn),np.array(vmx))
hthresh
np.array(hue)
: HSV图像中的色调通道(H)。np.array(hmn)
: 色调通道的下限值。np.array(hmx)
: 色调通道的上限值。- 输出: 一个二值图像,其中在
hmn
和hmx
之间的色调值被设置为白色,其他值被设置为黑色。
sthresh
np.array(sat)
: HSV图像中的饱和度通道(S)。np.array(smn)
: 饱和度通道的下限值。np.array(smx)
: 饱和度通道的上限值。- 输出: 一个二值图像,其中在
smn
和smx
之间的饱和度值被设置为白色,其他值被设置为黑色。
vthresh
np.array(val)
: HSV图像中的亮度通道(V或I,取决于你如何称呼它)。np.array(vmn)
: 亮度通道的下限值。np.array(vmx)
: 亮度通道的上限值。- 输出: 一个二值图像,其中在
vmn
和vmx
之间的亮度值被设置为白色,其他值被设置为黑色。Tip:之前的颜色追踪实验也用到了掩膜,inRange(),只不过指定的通道为HSV全部:
树莓派4B_OpenCv学习笔记12:OpenCv颜色追踪_画出轨迹-CSDN博客
组合HSV阈值 cv2.bitwise_and()
:
# 组合HSV阈值 使用按位与操作来组合三个HSV分量的阈值结果,
从而得到颜色范围内所有像素的掩码。
tracking = cv2.bitwise_and(hthresh,cv2.bitwise_and(sthresh,vthresh))
函数作用:
cv2.bitwise_and()
对两个数组进行按位与操作,通常用于组合或修改二值图像。当想将多个二值图像(或掩码)组合在一起时,通常需要使用这个函数来确保只有在所有掩码中对应位置都为“真”(即白色或255)的像素才会在结果图像中保留为白色。
在给出的例子中,将三个HSV分量(色调、饱和度和亮度)的阈值结果组合成一个最终的掩码,以识别特定颜色范围内的所有像素。
在这个修正后的代码中:
hsv_thresh_hs
是hthresh
和sthresh
的按位与结果,它只包含同时在色调和饱和度范围内的像素。tracking
是hsv_thresh_hs
和vthresh
的按位与结果,它只包含同时在色调、饱和度和亮度范围内的像素,即您想要跟踪的颜色范围内的所有像素。
形态学操作函数:(膨胀/腐蚀/开运算/闭运算):
closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)
cv2.morphologyEx()
是 OpenCV 中用于形态学变换的函数,它可以执行各种形态学操作,如腐蚀(erosion)、膨胀(dilation)、开运算(opening)和闭运算(closing)等。在给出的例子中,
cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)
是执行闭运算(closing operation)的调用。函数作用:闭运算首先执行膨胀操作,然后执行腐蚀操作。闭运算的主要目的是消除图像中的小孔(即黑色区域中的白色点),并连接相邻的对象。这在图像处理中用于平滑物体的轮廓,去除小的孔洞,以及连接断裂的轮廓。
传入参数:
src
:输入图像,通常是二值图像。在给出的例子中,是
dilation
,即已经过膨胀操作的图像。
- 类型:可以是灰度图或二值图,其数据类型通常是
CV_8U
,CV_16U
,CV_16S
,CV_32F
, 或CV_64F
之一。- 描述:源图像,即要进行形态学操作的图像。
operation
:形态学操作的类型。在给出的例子中,是
cv2.MORPH_CLOSE
,表示执行闭运算。
cv2.MORPH_ERODE
:腐蚀操作cv2.MORPH_DILATE
:膨胀操作cv2.MORPH_OPEN
:开运算(先腐蚀后膨胀)cv2.MORPH_CLOSE
:闭运算(先膨胀后腐蚀)cv2.MORPH_GRADIENT
:形态学梯度cv2.MORPH_TOPHAT
:原图像减去膨胀的图像cv2.MORPH_HITMISS
:结构元素对应的点集比较- 注意:其他可能还有如
cv2.MORPH_BLACKHAT
等操作,具体请参考 OpenCV 官方文档。kernel
:结构元素(structuring element)。
- 类型:数组,通常是 numpy 数组,形状如矩形、椭圆或交叉形等。
- 描述:定义了形态学操作的局部形状和大小。可以使用
cv2.getStructuringElement()
函数来创建结构元素。dst (输出图像, 可选):
- 类型:与
src
相同的数据类型- 描述:输出图像,如果未指定,则函数会创建一个新的输出图像。
anchor (锚点位置, 可选):
- 类型:元组,指定了结构元素的锚点位置。
- 描述:默认为结构元素的中心。如果指定了锚点,则形态学操作将围绕该点进行。
iterations (迭代次数, 可选):
- 类型:整数
- 描述:腐蚀与膨胀被应用的次数。默认为1。
borderType (边界类型, 可选):
- 类型:整数
- 描述:像素边界扩展类型,具体类型请参考 OpenCV 官方文档中的
BorderTypes
。borderValue (边界值, 可选):
- 类型:与
src
相同的数据类型- 描述:当
borderType
为BORDER_CONSTANT
时,用于填充边界的常量值。
高斯模糊cv2.GaussianBlur()
:
closing = cv2.GaussianBlur(closing,(5,5),0)
在 OpenCV 中用于对图像进行高斯模糊。高斯模糊是一种用于减少图像噪声和细节层次的图像滤波技术。它使用一个高斯函数来创建模糊滤波器,该滤波器在中心点的权重最高,然后随着距离的增加权重逐渐降低。
该函数对
closing
图像进行高斯模糊。这通常在图像处理流程中用于减少图像的细节和噪声,尤其是在特征检测或对象识别之前。
传入参数:
- src (
closing
在此例中):输入图像,即要进行高斯模糊的图像。- ksize ((5,5) 在此例中):高斯核的大小。它必须是正奇数,并且可以是元组
(width, height)
,其中width
和height
必须是正整数且都是奇数。如果ksize
是一个整数,那么它会被视为(ksize, ksize)
的正方形核。在此例中,(5,5)
表示一个 5x5 的核。- sigmaX (0 在此例中):X 方向的标准差;决定了模糊的程度。如果
sigmaX
是 0,那么它会根据核大小来计算。如果sigmaY
也是 0,那么sigmaY
会与sigmaX
相等。在此例中,因为sigmaX
是 0,所以会根据 5x5 的核大小来计算标准差。输出:
输出是一个与输入图像closing
大小和类型相同的新图像,其中包含了高斯模糊的结果。这个新的图像是原图像的模糊版本,细节层次被降低,噪声被减少。
霍夫圆变换来检测圆形:
#使用霍夫圆变换来检测圆形。
circles = cv2.HoughCircles(closing,cv2.HOUGH_GRADIENT,2,120,param1=120,param2=50,minRadius=10,maxRadius=0)
cv2.HoughCircles
函数用于在灰度图像中检测圆形。它使用霍夫变换的一个变种来检测图像中的圆形。传入参数:
image
:8位单通道灰度图像。method
:检测方法,如cv2.HOUGH_GRADIENT
或cv2.HOUGH_GRADIENT_ALT
。dp
:检测器分辨率的倒数。如果设置为 1,则与图像分辨率相同。如果设置为 2,则分辨率是原始图像的一半。minDist
:检测到的圆心之间的最小距离。param1
:Canny 边缘检测中的高阈值。param2
:在检测阶段,检测到的圆心的累加器阈值。这个值越小,检测到的圆就越多。minRadius
:最小圆半径。maxRadius
:最大圆半径。如果设置为 0,则使用最大可能的半径。输出:
返回一个 NumPy 数组,其中包含检测到的圆的 (x,y) 坐标和半径。数组的形状是(num_circles, 3)
,其中每一行包含三个值:(x, y, radius)
。
网上查阅资料贴出:
[树莓派基础]8.树莓派OpenCV颜色追踪讲解_哔哩哔哩_bilibili
文心一言
相关文章:
树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的…...
Golang | Leetcode Golang题解之第198题打家劫舍
题目: 题解: func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…...
基于ruoyi-app的手机短信登录(uniapp)
本篇用于记录h5的框架搭建 组件地址:短信验证码登陆,手机号,验证码倒计时 - DCloud 插件市场 调整后的表单组件代码: <template><view class"login-view"><!-- <input type"tel" confirm-type"确认"…...
机器学习环境搭建
前言 个人笔记,记录框架和小问题,没有太详细记载。。 1、Anaconda安装 下载地址: Free Download | Anaconda (慢) 国内镜像:https://link.csdn.net/?targethttp%3A%2F%2Fitcxy.xyz%2F241.html 下载…...
2095.删除链表的中间节点
给你一个链表的头节点 head 。删除链表的中间节点 ,并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…...
Qt QML 坑
Qt QML 坑 QML Listview 1、不定高item 导致item重叠 ListView {id: _cityListViewproperty var _cityArray: [{ type:"A",cityArray:[]},{ type:"B",cityArray:[]},{ type:"C",cityArray:[]},{ type:"D",cityArray:[]}]model: List…...
Chrome浏览器web调试(js调试、css调试、篡改前置)
目录 1. 打开开发者工具(Dev Tool) 2. 打开命令菜单 截图 3. 面板介绍 4. CSS调试 右键检查快速到达元素处 查找DOM数 利用面板Console查找DOM节点 内置函数查找上一个选择点击的元素 5. 调试JS代码(Javascript调试) 日志调试 选择查看日志等级 眼睛观测变量 …...
【Java】Logbook优化接口调用日志输出,优雅!
logbook 简介 很多人可能没有接触过 logbook,但它的确是一个很好用的日志框架。引用官网的介绍 Logbook 是一个可扩展的 Java 库,可以为不同的客户端和服务器端技术启用完整的请求和响应日志记录。它通过以下方式满足了特殊需求: 允许 Web 应…...
LabVIEW电压电流实时监测系统
开发了一种基于LabVIEW和研华(Advantech)数据采集卡的电压电流实时监测系统,通过高效的数据采集和处理,为工业和科研用户提供高精度、实时的电压电流监测解决方案。系统采用研华USB-4711A数据采集卡,结合LabVIEW编程环…...
骁龙相机拍照流程分析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 1.deliverInputEvent 拍照点击事件处理 2.submitRequestList Camera 提交拍照请求 3.createCaptureRequest 拍照请求帧数 骁龙相机通过binder 数据传输…...
sql-语句
文章目录 SQL语句的学习sql是什么sql的内置命令sql的种类sql mode库,表属性介绍:字符集,存储引擎列的数据类型:数字,字符串,时间列的约束DDL: 数据定义语言库表 Online DDL(ALGORITHM) *DML :数据操纵语言资…...
解决Vue3项目中跨域问题的步骤
决Vue3项目中跨域问题的步骤可以按照以下方式清晰地分点表示和归纳: 1. 使用代理服务器(Proxy) 步骤: 在Vue项目的根目录下找到或创建vue.config.js文件。在vue.config.js中配置devServer的proxy选项。设定需要代理的接口前缀&a…...
macos scroll direction
If there is no Trackpad option, we can change it in the Mouse option. How to Change the Scroll Direction on a Mac: 2 Ways...
Websocket实现方式二——注解方式
添加Websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>根据ServerEndpoint注解注册Websocket Configuration public class AgentWsConfig …...
零基础开始学习鸿蒙开发-页面导航栏布局设计
目录 1.设定初始页(Idex.ets) 2.自定义首页组件 3.自定义发现页面组件 4.自定义设置页面组件 总结:主要是运用 了Tabs组件对导航栏进行布局,然后运用BottomTabBarStyle组件嵌套图标和文字,完成导航栏的制作。 1.设定初始页(Idex.ets) import {find}…...
【Hive中常见的优化手段----数据采集!Join 优化!Hive索引!数据倾斜!mapreduce本地模式!map和reduce数量调整!】
前言: 💞💞大家好,我是书生♡,今天主要和大家分享一下Hive中常见的优化手段----数据采集!常见的Join 优化有哪几种!什么是Hive索引!数据怎么发生倾斜!什么是mapreduce的本…...
【面试系列】软件工程师高频面试题及详细解答
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…...
Qt开发 | Qt界面布局 | 水平布局 | 竖直布局 | 栅格布局 | 分裂器布局 | setLayout使用 | 添加右键菜单 | 布局切换与布局删除重构
文章目录 一、Qt界面布局二、Qt水平布局--QHBoxLayout三、Qt竖直布局四、Qt栅格布局五、分裂器布局代码实现六、setLayout使用说明七、布局切换与布局删除重构1.如何添加右键菜单2.布局切换与布局删除重构 一、Qt界面布局 Qt的界面布局类型可分为如下几种 水平布局(…...
LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection
LW-DETR: A Transformer Replacement to YOLO for Real-Time Detection 论文链接:http://arxiv.org/abs/2406.03459 代码链接:https://github.com/Atten4Vis/LW-DETR 一、摘要 介绍了一种轻量级检测变换器LWDETR,它在实时物体检测方面超越…...
前端技术(二)——javasctipt 介绍
一、javascript基础 1. javascript简介 ⑴ javascript的起源 ⑵ javascript 简史 ⑶ javascript发展的时间线 ⑷ javascript的实现 ⑸ js第一个代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>…...
FireFox 编译指南2024 Windows10篇-环境准备(一)
1. 引言 在开源浏览器项目中,Firefox因其高性能和灵活性而备受开发者青睐。为了在本地环境中编译和定制Firefox,开发者需要做好充分的环境准备工作。这不仅是编译成功的基础,也是后续调试、优化和二次开发的关键步骤。 编译Firefox是一个复…...
Spring Boot中的热部署配置
Spring Boot中的热部署配置 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot项目中实现热部署配置,提升开发效率和项…...
用ChatGPT快速打造一个专业WordPress网站
作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…...
dsp入门
安装环境 安装 ccs5.5安装 BIOS-MCSDK 多核软件开发包安装 仿真器驱动 工程创建与导入工程 创建工程 创建工程填信息添加.cmd文件,配置内存编译 导入工程 导入 配置工程 选择properties 环境变量 头文件 库文件 仿真器 添加仿真器 先调出仿真器界面创建仿…...
Java并发编程-Atomiclnteger、LongAdder等原子类的使用及案例实战
文章目录 i++和Atomiclnteger之间的差别分析以及使用介绍i++AtomicInteger使用介绍i++ 示例AtomicInteger 示例总结Atomiclnteger中的CAS无锁化原理和思路介绍CAS 原理AtomicInteger 的 CAS 应用无锁化思路Atomiclnteger源码剖析:仅限JDK内部使用的Unsafe类`Unsafe` 类的关键作…...
九浅一深Jemalloc5.3.0 -- ②浅*size class
目前市面上有不少分析Jemalloc老版本的博文,但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析Jemalloc5.3.0的实现。 另外,单讲实现代码是极其枯燥的,…...
JavaScript——属性的增删改查
目录 任务描述 相关知识 属性的获取 方式一 方式二 属性的修改与新增 删除属性 编程要求 任务描述 Luma Restaurant 以前的财务人员在统计销售额的时候不小心把数据弄错了,现在的财务人员想通过一个 JavaScript 函数方便的修改数据,并署上自己的…...
51单片机第15步_串口多机通讯使用CRC8校验
本章重点介绍串口多机通讯使用CRC8校验。 数据格式:"$123xxxx*crc8\r\n"; 如:"$1234567890ABCDEF*06\r\n" 如:"$1231234567890*31\r\n" crc8是CRC校验值,为十六进制的ASCII码,不包含$和校验值前面的那个* #include <REG51.h> //包含…...
WPF----进度条ProgressBar(渐变色)
ProgressBar 是一种用于指示进程或任务的进度的控件,通常在图形用户界面(GUI)中使用。它提供了一种视觉反馈,显示任务的完成程度,帮助用户了解任务的进展情况。 基本特性 Minimum 和 Maximum 属性: 这些属…...
Apipost接口测试工具的原理及应用详解(四)
本系列文章简介: 随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为…...
【图论】200. 岛屿问题
200. 岛屿问题 难度:中等 力扣地址:https://leetcode.cn/studyplan/top-100-liked/ 问题描述 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围&…...
AI学习指南机器学习篇-随机森林的优缺点
AI学习指南机器学习篇-随机森林的优缺点 引言 机器学习是人工智能领域的重要分支,其中随机森林(Random Forest)算法以其高性能和广泛应用而备受瞩目。然而,就像任何其他算法一样,随机森林也有其优缺点。本文将深入探讨随机森林算法的优势和…...
基于boost::beast的http服务器(上)
文章目录 1.beast网落库介绍2.相关类及api3.异步读写的处理3.1异步写案例3.2异步读案例 1.beast网落库介绍 Beast网络库是一个基于Boost库的C网络库,特别用于开发高性能的网络应用程序。它提供了一组易于使用的API,主要用于处理HTTP和WebSocket协议&…...
深度学习之近端策略优化(Proximal Policy Optimization,PPO)
PPO(Proximal Policy Optimization,近端策略优化)是深度强化学习中的一种算法,属于策略梯度方法中的一种。PPO通过优化策略来最大化累积奖励,具有稳定性好、易于调参等优点,是目前广泛应用的一种深度强化学习算法。下面介绍PPO的基本原理和流程。 PPO基本原理 PPO算法的…...
用pycharm进行python爬虫的步骤
使用 pycharm 进行 python 爬虫的步骤:下载并安装 pycharm。创建一个新项目。安装 requests 和 beautifulsoup 库。编写爬虫脚本,包括获取页面内容、解析 html 和提取数据的代码。运行爬虫脚本。保存和处理提取到的数据。 用 PyCharm 进行 Python 爬虫的…...
重写功能 rewrite
Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之 一,用于实现URL的重写,URL的…...
ISO19110操作要求类中/req/operation/operation-attributes的详细解释
/req/operation/operation-attributes 要求: 只有要素属性(feature attributes)可以通过‘observesValueOf’、‘triggeredByValuesOf’或‘affectsValuesOf’关联角色与要素操作(feature operations)关联。 具体解释 定义 要…...
访客(UV)、点击量(PV)、IP、访问量(VV)概念
1、https://www.cnblogs.com/QingPingZm/articles/13855808.htmlhttps://www.cnblogs.com/QingPingZm/articles/13855808.html...
C++系统编程篇——Linux第一个小程序--进度条
(1)先引入一个概念:行缓冲区 \r和\n \r表示回车 \n表示回车并换行 ①代码一 #include<stdio.h> #include<unistd.h> int main()…...
一个中文和越南语双语版本的助贷平台开源源码
一个中文和越南语双语版本的助贷平台开源源码。后台试nodejs。 后台 代理 前端均为vue源码,前端有中文和越南语。 前端ui黄色大气,逻辑操作简单,注册可对接国际短信,可不对接。 用户注册进去填写资料,后台审批&…...
【游戏引擎之路】登神长阶(五)
5月20日-6月4日:攻克2D物理引擎。 6月4日-6月13日:攻克《3D数学基础》。 6月13日-6月20日:攻克《3D图形教程》。 6月21日-6月22日:攻克《Raycasting游戏教程》。 6月23日-6月30日:攻克《Windows游戏编程大师技巧》。 …...
FireAct:使用智能体(agent)微调大语言模型
1.概述 近年来,针对语言模型(LMs)的研究致力于探索其与外部工具或环境互动的能力,以推进新型语言代理的发展。此类代理具备从环境反馈中汲取新知识、通过语言推理进行连续决策,以及借助自我反思提升任务解决能力的能力。工业界的进展,如ChatGPT插件,凸显了语言代理在实际…...
20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览
20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内,提供了编译脚本 build.sh,运行该脚本对整个源码进行编译,需要在终端切换到解压 出来的源码路径,找到 build.sh 文件…...
python数据分析——数据分类汇总与统计
数据分类汇总与统计 前言一、Groupby分类统计语法按列分组示例一示例二示例三 遍历各分组示例 使用字典和Series分组示例 使用函数分组示例 二、数据聚合groupby的聚合函数示例一示例二 逐列及多函数应用示例一示例二 返回不含行索引的聚合数据示例 三、一般性的“拆分-应用-合…...
iOS17系统适配
iOS17 新功能 文章目录 iOS17 新功能iOS17支持哪几款机型Xcode15新特性iOS17-开发适配指南 横屏待机 在iOS 17中,还带来了横屏待机功能,苹果将这个新功能命名为“Standby”模式,为 iPhone 带来了全新的玩法。iPhone启用之后,默认情…...
树洞陪聊陪玩交友程序系统源码,解锁交友新体验
在繁忙的都市生活中,你是否渴望找到一片属于自己的秘密花园,倾诉心声、分享快乐?今天,就让我带你走进这片名为“树洞”的神秘之地,感受陪聊陪玩交友的全新魅力! 🌳树洞陪聊陪玩交友程序系统 你…...
区间动态规划——最长回文子序列长度(C++)
把夜熬成粥,然后喝了它。 ——2024年7月1日 书接上回:区间动态规划——最长回文子串(C)-CSDN博客,大家有想到解决办法吗? 题目描述 给定一个字符串s(s仅由数字和英文大小写字母组成࿰…...
无人机远程控制:北斗短报文技术详解
无人机(UAV)技术的快速发展和应用,使得远程控制成为了一项关键技术。无人机远程控制涉及无线通信、数据处理等多个方面,其中北斗短报文技术以其独特的优势,在无人机远程控制领域发挥着重要作用。本文将详细解析无人机远…...
240627_关于CNN中图像维度变化问题
240627_关于CNN中图像维度变化问题 在学习一些经典模型时,其中得维度变化关系总搞不太明白,集中学习了以下,在此作以梳理总结: 一般来说涉及到的维度变换都是四个维度,当batch size4,图像尺寸为640*640&a…...
食品行业怎么用JSON群发短信
食品作为日常生活不可缺少的元素,市场需求是很稳定的,但是份额就那么多,商家都要来抢占的话,就需要运营推广各凭本事,市场运营中选择合适的推广方式,可以增加店铺销售额,很多实体店或商城都会建…...
Android 数据备份:确保信息安全与持久性
Android 手机上的数据备份是保护用户重要信息和确保数据持久性的关键措施。随着移动设备在我们日常生活中的重要性日益增加,数据备份不仅仅是一项良好的实践,更是保障个人和专业数据安全的必要步骤。 为什么需要数据备份? 在移动设备上&…...
手机数据恢复篇:恢复出厂设置后从iPhone快速恢复数据
如今,恢复出厂设置后从iPhone恢复数据的需求变得越来越普遍。无论是由于意外重置、软件问题,还是希望恢复以前拥有的设备,丢失数据都可能令人痛苦。值得庆幸的是,随着技术的进步,可以快速安全地检索丢失的信息。本指南…...
toRefs 和 toRef
文章目录 toRefs 和 toReftoRefstoRef toRefs 和 toRef toRefs toRefs 把一个由reactive对象的值变为一个一个ref的响应式的值 import { ref, reactive, toRefs, toRef } from vue; let person reactive({name: 张三,age: 18, }); // toRefs 把一个由reactive对象的值变为一…...
7.2、指针变量的定义和使用
代码 #include <iostream> using namespace std; #include <string>int main() {//定义指针int a 10;//指针定义语法:数据类型 * 指针变量名int * p;//让指针记录变量a的地址p &a;cout << "a的地址为:" << &am…...
【Nginx】学习及相关题目整理
文章目录 1. 什么是Nginx?2. Nginx有哪些优点?3. Nginx处理请求流程?4. Nginx应用场景5. Nginx是如何实现高并发的?6. 什么是正向代理?7. 什么是反向代理?8. 反向代理服务器的优点是什么?9. Nginx目录结构…...
从入口文件搭建php项目
入口文件index.php <?phprequire CallBack.php; // 处理回调请求逻辑 $bot new CallBack();// 请求方式 if (isset($_GET[method])) {$method $_GET[method];if (method_exists($bot, $method)) {return $bot->$method();} else {echo "没有该功能";die();…...
2024年全球汽车零部件供应商百强榜出炉:宁德时代排第4!国轩高科新上榜
6月23日,《美国汽车新闻》重磅发布了2024年全球汽车零部件供应商百强榜。值得一提的是,今年上榜的中国企业又多了两家,分别是国轩高科和三花汽零,另外宁德时代的排名又上升了一位,目前仅次于博世、采埃孚和麦格纳国际这三家传统零部件巨头。中国企业一共上榜15家,其中前5…...
携手“黔”行百花开厦门大学对口支援贵州师范大学十八载
厦门大学对口支援贵州师范大学十八载携手“黔”行百花开“我为能够参与助力贵州师范大学学科建设实现从0到1,亲眼见证两校合作开花结果而感到骄傲自豪。”2007年,卢琳璋作为厦门大学首批派遣干部之一,挂职贵州师范大学数学与计算机科学学院院长,负责引领数学学科博士点的申…...
申城下周晴雨参半,高考期间多阴雨天气
东方网记者包永婷6月2日报道:这个双休日的天气很配合儿童节和出行,上海今天较昨天更加晴朗,蓝天白云的景象也赏心悦目。气温加快上升的步伐,徐家汇站最高气温止步28.2℃,午间有些热有些晒,早晚依旧延续着舒适的体感。明天会是近期最晴最热的一天,多云到晴为主,气温起步2…...
威兰达卖15.38万元,2.0L/2.5L,油耗5.7L
念寒记得不久前,有好几位车友问过我关于丰田威兰达的问题,其中最关心的就是这款车会不会降价促销,毕竟现在的合资燃油车确实不太好卖,所以我估计还有很多车友都是这样的一个想法。这不,千等万等降价终于被你们给等到了。近日,广汽丰田专门针对对威兰达推出了一项重磅优惠…...
Facebook的魅力:数字时代的社交热点
在当今数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的巨头,一直以其独特的魅力吸引着全球数十亿用户。本文将深入探讨Facebook的魅力所在,以及它在数字时代的社交热点。 1. 社交网络的霸主&…...
Python--List列表
list列表⭐⭐ 1高级数据类型 Python中的数据类型可以分为:数字型(基本数据类型)和非数字型(高级数据类型) ●数字型包含:整型int、浮点型float、布尔型bool、复数型complex ●非数字型包含:字符…...