OPENMV配置记录(一)

2023-05-16

文章目录

    • 1、刷写固件
    • 2、开始配置openmv
    • 3、图像获取与显示
    • 4、修改图像,获取像素,添加元素
    • 5、使用图像进行基本操作-颜色追踪
    • 6,识别码
    • 7、模版匹配
    • 8、通过比例的方法来求解距离
    • 9、组合使用

正好回家带了一篇H7的板子,想着先把openmv部分配置完再来整h7的开发,这个板子支持openmv的刷写,固件刷写提供内部flash和外部flah的方式,挺方便的。

板子如下,是weact家的,淘宝搜weact就能找到:
在这里插入图片描述

1、刷写固件

资料下载:

https://gitee.com/WeAct-TC

在这里插入图片描述

步骤如下:

  • 让板子进入dfu模式准备烧写,连接typec端口,按住boot键上电,进入dfu模式,查看电脑是否检测到dfu的接口,如果检测到则一切顺利(如果没有检测到dfu的接口就安装dfu的驱动,多试几次)
  • 使用官方批处理工具清楚flash(不知道是不是必须的反正我做了)
    在这里插入图片描述
  • 使用下载工具进行下载,将openmv.bin拖进下载框即可,这里说明,openmv.bin是结合引导文件和flash文件一起的,不用分别下载,直接在默认地址0x8000000处下载即可
  • 下载完成可以看到绿灯闪烁,这个是openmv的自检的灯,打开串口助手,可以看到串口多出一个带openmv的串口
    在这里插入图片描述
  • 打开ide进行连接
    在这里插入图片描述
  • 运行helloword例程,一切顺利!
    在这里插入图片描述

2、开始配置openmv

参考文档:

https://book.openmv.cc/

在这里插入图片描述

https://docs.singtown.com/micropython/zh/latest/openmvcam/index.html

在这里插入图片描述

3、图像获取与显示

使用摄像头获取图像并使用time获取帧率

import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置图像大小
sensor.skip_frames(time = 2000) # 开头跳一些帧
# sensor.skip_frames(10) # 直接指定跳过的帧数
clock = time.clock() # 主要是用来记录帧率

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    print(clock.fps())

效果如下:
在这里插入图片描述

上面的函数总结

图像格式:

  • GRAYSCALE
  • RGB565

图像大小:(每次是向下除2)

  • QVGA 320*240
  • QQVGA 460*120
  • QQQVGA 80*60

白平衡和自动增益

注意这两个都是为了使得图像更加真实,就是通过一些手段增强图像,其实没有改变了原始图像,结果是增强了视觉效果,就是给图像上增加了一些参数

sensor.set_auto_gain(True) # 自动增益
sensor.set_auto_whitebal(True) # 白平衡
sensor.set_auto_exposure(True) # 自动曝光

截取一段区域

import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.VGA)
sensor.set_windowing((320, 240)) #取中间的320*240区域

sensor.skip_frames(time = 2000) # 开头跳一些帧
clock = time.clock() # 主要是用来记录帧率

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    print(clock.fps())

在这里插入图片描述

镜头翻转

import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QVGA)

sensor.set_hmirror(True) # 水平翻转
sensor.set_vflip(True) # 垂直翻转
sensor.skip_frames(time = 2000) # 开头跳一些帧
clock = time.clock() # 主要是用来记录帧率

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    print(clock.fps())

这里是针对摄像头的翻转,特别是对于有些摄像头结构设计不合理的地方而言,特别重要!!!!

4、修改图像,获取像素,添加元素

获取某个点的像素值并修改某个点的像素值

import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QVGA)

sensor.set_hmirror(True) # 水平翻转
sensor.set_vflip(True) # 垂直翻转
sensor.skip_frames(time = 2000) # 开头跳一些帧
clock = time.clock() # 主要是用来记录帧率

img = sensor.snapshot()
print(img.get_pixel(10,10)) # 获取该点像素值
img.set_pixel(10,10,(255,0,0)) # 修改
print(img.get_pixel(10,10) # 再次打印,像素值改变

获取区域像素值

ROI = (10,10,20,20)

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    print(img.get_statistics(roi=ROI)) # 打印区域平均颜色值
    print(clock.fps())

可以看出这个获取的区域像素值包含了很多东西,相比某个点的丰富了很多
在这里插入图片描述
返回的主要是灰度的一些值,然后还有lab的一些值,这里重点关注LAB的值,因为LAB在颜色追踪等方面有很大优势,关于颜色空间的介绍可以参见我的另一篇文章:opecv答题树记录

获取ROI区域的LAB值

#设置ROI区域大小
ROI = (10,10,20,20)


while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像

    # 获取三个区域的lab值(众数)
    color_l= img.get_statistics(roi=ROI) .l_mode()
    color_a= img.get_statistics(roi=ROI) .a_mode()
    color_b= img.get_statistics(roi=ROI) .b_mode()
    print(color_l,color_a,color_b)
    img.draw_rectangle(ROI)
    #print(clock.fps())

在这里插入图片描述
上面已经接触到了绘图函数,绘图函数其实在可视化中有很重要的作用,一般来说,代码的结果需要推敲下才能理清,使用绘图函数可以很好的可视化出来结果。

下面开始使用常见的绘图函数

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像

    img.draw_line((100, 100, 200, 200), color=(255,0,0),thickness=3)
    img.draw_rectangle((200, 30, 41, 51), color=(255,0,0),fill = True)
    img.draw_circle(50, 200, 30,color=(0,255,0))
    img.draw_cross(90,60,size=10,color=(0,0,255))
    img.draw_arrow((80,100,120,50))
    #img.draw_string(10,10, "hello world!",scale = 2,color=(0,0,255))
    img.draw_string(10,10, "fps"+str(clock.fps()),mono_space = False,scale = 2,color=(0,0,255))

    print(clock.fps())

在这里插入图片描述
更多的绘图函数及用法可以参考:image — 机器视觉 — MicroPython 1.9.2 文档 (singtown.com)
里面讲的非常详细,需要了解更多建议多多参考,主要是里面的一些缺省参数,很重要,可以实现很多想要的效果,特别注意

  • 这个图像的改变不会对原图有什么影响,他的颜色也不会对原图有什么影像
  • 很多东西都只要一个很基本的参数,比如起点终点就OK,其他东西查文档基本都能很快获取

5、使用图像进行基本操作-颜色追踪

寻找色块,openmv提供了find—blob函数来寻找色块,这个原理是基于阈值的原理实现的,就是对符合阈值区域的搜寻,找到色块

  • 暂停图像,对需要的区域框选
    在这里插入图片描述
  • 根据上面图中的LAB大致的区域范围找到图像
    在这里插入图片描述
    使用find_blobs函数来搜寻色块,文档描述如下:
    在这里插入图片描述
    寻找代码如下:
# 寻找色块阈值区域
red = (32, 43, 43, 55, 36, 51)
yellow = (45, 68, -14, -1, 42, 56)
blue = (18, 39, 2, 32, -58, -32)
green = (18, 39, -40, -20, 8, 21)

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    blobs = img.find_blobs([red,yellow,blue,green],area_threshold = 80) # 添加了一个面积过滤,小于面积的值被过滤掉
    for blob in blobs:
        img.draw_rectangle(blob.rect())
    print(clock.fps())

在这里插入图片描述
下面开始对找到的色块进行标注:

# 寻找色块阈值区域
red = (32, 43, 43, 55, 36, 51)
yellow = (45, 68, -14, -1, 42, 56)
blue = (18, 39, 2, 32, -58, -32)
green = (18, 39, -40, -20, 8, 21)

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    blobs = img.find_blobs([red,yellow,blue,green],area_threshold = 80)
    for blob in blobs:
        #print(blob.code())
        #print(blob.x,blob.y)
        if blob.code() == 1:
            img.draw_string(blob.x(),blob.y(), 'red',mono_space = False,scale = 2,color=(0,0,255))
        elif blob.code() == 2:
            img.draw_string(blob.x(),blob.y(), 'yellow',mono_space = False,scale = 2,color=(0,0,255))
        elif blob.code() == 3:
            img.draw_string(blob.x(),blob.y(), 'blue',mono_space = False,scale = 2,color=(255,0,0))
        else:
            img.draw_string(blob.x(),blob.y(), 'green',mono_space = False,scale = 2,color=(0,0,255))
        img.draw_rectangle(blob.rect())
    print(clock.fps())

就是使用遍历的方法,使用预先准备好的标识进行匹配然后使用绘图函数进行标识:
在这里插入图片描述
还有一些其他比较常用的比如面积,中心坐标什么的,也都还行,详情见参考文档使用

6,识别码

AprilTag码

下面开始AprilTag部分的追踪,这里不做介绍,直接使用

  • 首先,AprilTag不是一个码,是一系列码,不同的码属于不同的家族
  • 不同家族的码区别在于有效区域的不同,随着有效区域的变化,识别的准确率会变化
  • 这里openmv推荐使用TAG36H11家族的
  • 使用ide中的机器视觉工具可以直接生成AprilTag码
  • 使用的时候要注意关闭白平衡和自动增益

寻找AprilTag和寻找小球有点像,也是有专门的函数来寻找

import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QQVGA)

sensor.set_auto_gain(False)
sensor.set_auto_whitebal(False)
sensor.skip_frames(time = 2000) # 开头跳一些帧
clock = time.clock() # 主要是用来记录帧率

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    # 寻找标志
    for tag in img.find_apriltags():
        img.draw_rectangle(tag.rect(),color = (0,0,255))
        img.draw_cross(tag.cx(),tag.cy(),color = (0,0,255))
        degress = 180 * tag.rotation() / math.pi # 旋转角度
        print(tag.id(),degrees())
    #print(clock.fps())

可以看出这里除了识别出id之外,还可以识别出旋转角度其中角度是弧度值,使用数学函数进行了转换

二维码
获取图像后使用下面的代码:

    img = sensor.snapshot()
    for code in img.find_qrcodes():
        print(code)

7、模版匹配

这里使用的是一种叫ncc模版匹配的方法,官方描述如下:
在这里插入图片描述
这里总结下我用的时候的感受:

  • 使用需要灰度图,就是原来的rgb565要变为灰度输入,当然转成灰度给模版匹配用,然后原来的彩色图保留肯定也是可以的
  • 要添加两个包,在image里面
  • 模版选用pgm的图,官方不带这个图,需要自己转换
  • 模版可以选择从flash或者sd卡中获取,不过不建议从flash,因为内存不够

框选获取模版,默认保存是bmp的无损格式
在这里插入图片描述

转换网站

from image import SEARCH_EX, SEARCH_DS
import sensor,image,time
from image import SEARCH_EX, SEARCH_DS

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.GRAYSCALE) # 设置颜色格式为灰度
sensor.set_framesize(sensor.QQVGA)

#sensor.set_auto_gain(False)
#sensor.set_auto_whitebal(False)
sensor.skip_frames(time = 2000) # 开头跳一些帧
template = image.Image("/1.pgm")
clock = time.clock() # 主要是用来记录帧率

while(True):
    img = sensor.snapshot()
    r = img.find_template(template, 0.70, step=4, search=SEARCH_EX)
    if r:
        img.draw_rectangle(r)

效果如下:
在这里插入图片描述
对多个模版进行匹配,先实地选取多个模版:
在这里插入图片描述
对模版进行检索

import sensor,image,time
from image import SEARCH_EX, SEARCH_DS

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.GRAYSCALE) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QQVGA)

#sensor.set_auto_gain(False)
#sensor.set_auto_whitebal(False)
sensor.skip_frames(time = 2000) # 开头跳一些帧
templates = ["00.pgm","01.pgm","02.pgm","03.pgm"]
clock = time.clock() # 主要是用来记录帧率

while(True):
    img = sensor.snapshot()
    for t in templates:
        template = image.Image(t)
        r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
        if r:
            img.draw_rectangle(r)
            print(t)

经过我实测,效果不是很好
在这里插入图片描述

8、通过比例的方法来求解距离

这个其实挺简单的,基本都知道近大远小的原理,那么大小就是区域面积了,所有根据区域面积就可以比较出物体的距离,当然这个误差很大,只能作为一个感性的认识,结果会受很多因素影响

  • 首先用之前的色块方法获取一个像素区域的面积
import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QVGA)

#sensor.set_auto_gain(False)
#sensor.set_auto_whitebal(False)
sensor.skip_frames(time = 2000) # 开头跳一些帧

clock = time.clock() # 主要是用来记录帧率

#red = (32, 43, 43, 55, 36, 51)
#yellow = (45, 68, -14, -1, 42, 56)
blue = (18, 39, 2, 32, -58, -32)
#green = (18, 39, -40, -20, 8, 21)

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    blobs = img.find_blobs([blue],area_threshold = 80) # 添加了一个面积过滤,小于面积的值被过滤掉
    for blob in blobs:
        img.draw_rectangle(blob.rect())
        print(blob.area())

可以看出打印像素值如下,这个就是最基本的比例系数了
在这里插入图片描述

  • 使用比例来计算距离
import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QVGA)

#sensor.set_auto_gain(False)
#sensor.set_auto_whitebal(False)
sensor.skip_frames(time = 2000) # 开头跳一些帧

clock = time.clock() # 主要是用来记录帧率

#red = (32, 43, 43, 55, 36, 51)
#yellow = (45, 68, -14, -1, 42, 56)
blue = (18, 39, 2, 32, -58, -32)
#green = (18, 39, -40, -20, 8, 21)

k = 600

while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    blobs = img.find_blobs([blue],area_threshold = 80) # 添加了一个面积过滤,小于面积的值被过滤掉
    if len(blobs) == 1: # 只有一个框的时候进行过寻找
        b = blobs[0] # 就是获取这个框
        img.draw_rectangle(b[0:4]) # 画矩形
        img.draw_cross(b[5],b[6]) # 画十字中心
        lm = (b[2]+b[3])/2 # 面积=宽*高
        length = k/lm # 使用比例,因为最开始是10厘米,整数的原因
        img.draw_string(0, 0,"length :%.2f"%(length),mono_space = False,scale = 2)

运行结果如下:
在这里插入图片描述

9、组合使用

这里主要是颜色和色块组合使用,使用就是先找到圆的区域然后在圆的区域里面寻找颜色阈值符合要求的

其中的寻找圆的函数参数如下:
在这里插入图片描述
代码如下:

import sensor,image,time

sensor.reset() # 复位摄像头
sensor.set_pixformat(sensor.RGB565) # 设置颜色格式为RGB565
sensor.set_framesize(sensor.QQVGA)

#sensor.set_auto_gain(False)
#sensor.set_auto_whitebal(False)
sensor.skip_frames(time = 2000) # 开头跳一些帧

clock = time.clock() # 主要是用来记录帧率

#red = (32, 43, 43, 55, 36, 51)
#yellow = (45, 68, -14, -1, 42, 56)
blue = (18, 39, 2, 32, -58, -32)
#green = (18, 39, -40, -20, 8, 21)


while(True):
    clock.tick() # 这个可以记录帧率
    img = sensor.snapshot() # 拍照+获取图像
    for c in img.find_circles(r_min = 10):
        area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())
        statistics = img.get_statistics(roi=area)
        if 18<statistics.l_mode()<50 and 2<statistics.a_mode()<38 and -60<statistics.b_mode()<-22:
            img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0),thickness=3)
        else:
            img.draw_rectangle(area, color = (255, 255, 255))
        img.draw_string(0, 0,"FPS :%.2f"%(clock.fps()),mono_space = False,scale = 2)

效果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OPENMV配置记录(一) 的相关文章

  • OpenMV巡线

    你向别人介绍openmv就说哦这是一个嵌入式的机器视觉模块 一个摄像头模块带有主控 xff0c 可以用Python编程 用openMV巡线 借助的是线性回归 xff0c 线性回归的意思就是找出一条直线嘛 xff0c 用最小二乘法 xff0c
  • OpenMV超声波测距

    OpenMV超声波测距 本文首发于 xff1a https www bilibili com read cv3051569 参考链接 xff1a https blog csdn net bei dai he article details
  • OPENMV的学习(三)巡线

    存储文件 插入sd卡 xff0c 会将默认储存地址flash改为sd卡 image save span class token punctuation span span class token string 34 example jpg
  • Ubuntu16.04 server配置记录

    1 安装vmtool 因为没有图形界面 xff0c 这里全部使用命令行操作 xff0c 虚拟机菜单点击安装vmtool工具后 xff0c 需要手动挂载 a mkdir tmp cdrom b mount dev cdrom tmp cdro
  • 2021电赛F题之openmv巡线(附代码)

    效果展示 xff1a 出错解决方法 openmv数字识别源代码 gitee 通过使用不同阈值的方法可以得到当前区域中什么区域有红线 xff0c 对于电控而言作用类似于红外对管 xff0c 之后电控通过逻辑判断如何运动 xff0c 这就是我们
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带
  • OPENMV巡线

    将openmv图片划分成三个ROI区域 import sensor image time lcd from pyb import UART from pyb import LED ROIS 61 0 0 160 40 0 6 0 40 16
  • openmv的串口传输

    import sensor image time from pid import PID from pyb import Servo from pyb import UART uartCP 61 UART 1 115200 用于电脑与OPe
  • 【DIY】基于OpenMV的STM32追球小车

    目录 xff1a 总体设计1 基础硬件DIY设计1 xff09 整体原理图2 xff09 PCB电路 2 OpenMV简单识别程序设计 与 STM32控制程序设计1 xff09 OpenMV简单识别程序设计 microPython 2 xf
  • 【OpenMV小车——第1.2篇】OpenMV主控板的简介与入门使用

    前言 xff1a 视觉小车最重要的是视觉功能 xff0c 其实现方式主要有 xff1a Opencv 43 外置计算机摄像头 需要计算机作为上位机 Stm32 43 OV7670 较难 xff0c 大师级 OpenMV摄像头 较简单 xff
  • 【毕业设计】基于STM32及OpenMV的云台追踪装置

    目录 修改记录1 摘 要2 整体功能分析3 硬件选型3 1 OpenMV4 Cam H73 2 STM32F103ZET63 3 DS3120舵机3 4 LED补光板3 5 供电及稳压3 6 硬件连接 4 软件功能实现4 1 OpenMV部
  • OPENMV结合PIX飞控实现四轴定点 循迹 2017电赛

    本文章代码已上传Github xff1a https github com Kevincoooool 2017 Follow 有兴趣的可以加个STAR 自从17年国赛之后 xff0c 自己做了openmv xff0c 加了很多群 xff0c
  • OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

    文章目录 1 采集2 连接3 训练复制API KEY上传照片模型创建生成神经网络训练神经网络测试神经网络备份保存 4 下载代码分析 注意 xff1a 只有 OpenMV4 Plus可以自己训练神经网络 xff0c 其他版本的性能不够 本节讲
  • OpenMV:23串口发送数据

    文章目录 产品Hello World简单的数据发送 本节讲解 如何使用OpenMV通过串口来发送数据 OpenMV 是可以直接通过串口发送字符串的 为什么要用串口呢 xff1f 因为要时候需要把信息传给其他MCU xff08 单片机 xff
  • OpenMv测距(Apriltag)

    利用OpenMv测离Apriltag的距离 xff08 其他色块啥的算法都差不多 xff0c 主要是Apriltag精确一些 xff09 span class token comment 本次利用OpenMv单目测距Apriltag离摄像头
  • OpenMV识别色块与STM2F4通过串口通信

    花了三天时间学习了一下OpenMV的简单使用 xff0c 在这写个博客记录一下 xff0c 并且上传自己的代码 xff0c 以方便交流学习 第一次发帖 xff0c 不周之处见谅 首先概括一下我实现的功能 xff1a OpenMV识别红色色块
  • 【OpenMv小车】OpenMv追小球的小车之pid调用

    pid py gt gt https github com wagnerc4 flight controller blob master pid py openmv 官网 xff1a http book openmv cc project
  • 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构 控制摄像头在水平和垂直方向的运动 舵机带动摄像头进行二维平面的运动的同时 摄像头进行实时人脸检测 一旦检测到人脸 则进行人脸跟踪 摄像头采用星瞳openMV H7 主控采用的
  • 毕业设计 单片机与OpenMV机器视觉目标跟踪系统

    文章目录 0 前言 课题简介 设计框架 3 openMV实现舵机定位色块STM32 3 硬件设计 4 软件设计 4 1 硬件连接 4 2 软件代码 OpenMV端 4 3 软件代码 STM32端 4 4 利用PC端测试数据数据是否发送接收正
  • Anaconda常用命令

    Anaconda常用命令 虚拟环境创建与切换 查看当前conda的信息 conda info 查看当前已经创建的虚拟环境 conda env list 或 conda info e 或conda info env 创建虚拟环境 conda

随机推荐

  • docker中镜像源推荐

    1 xff0c 个人建议使用 网易镜像源 镜像源有以下5种 1 网易 http hub mirror c 163 com 2 Docker中国区官方镜像 https registry docker cn com 3 ustc https d
  • VScode创建C++项目

    VScode创建C 43 43 项目 假设系统已经安装了MinGW64 插件 常用插件 创建Project 配置json文件 需要修改的地方都在下方注释说明 根据MinGW64安装位置进行修改 c cpp properties json s
  • C++的一个问题点,数组作为参数传递到函数之后,不能直接求出长度

    YU 原数组 xff0c 传递参数之后 结果是作为参数传进去之后是作为指针 xff0c 是不能求出长度的 xff0c 所以需要把长度提前求出作为参数传入该函数 反思 xff1a 最近C 43 43 Python xff0c java轮流用
  • 基于from flask import Flask,render_template 上传网页遇到的问题

    我们要上传多个页面形成一个网站 xff0c 首先我们需要在index xff08 一般这个都是首页面 xff09 查看其源码 找到类似 这段代码里面包括了前面的网站 xff0c 所以这时候我们只需要把它变成带使用的状态 xff0c 操作就是
  • 跨交换机的VLAN设置

    实现目标 xff1a 进行多台主机多个vlan接口进行互相通信 需要知识 xff1a 1 不同的vlan接口的是不能进行通信的 2 在要跨越多个交换机进行通信的时候要对进行交互的交换机进行共享vlan端口的设置 3 在设置网络号的时候应该注
  • Wireshark抓取cookie:用户名...,TCP报文等信息实战

    这里我们要先安装Wireshark xff0c 这里要注意的是一些低级版本刚刚下下来的时候是找不到网络接口的 xff0c 所以这时候要更新 xff0c 然后再下应该WinPro xff08 应该是这个 xff09 xff0c 之后就有网络接
  • 计算机网络知识点总结提纲(谢希仁)

    1 IOS OSI对王道书上的缩减总结 清晰pdf xff1a 链接 xff1a https pan baidu com s 1f6DqMsHky4kP8i9WQLvCew pwd 61 the3 提取码 xff1a the3 来自百度网盘
  • C++getline和 cin的探讨

    从结果可以看出 xff0c cin是会把空格部分舍弃的 如果是输入一个 然后空格在输入其他的 xff0c 因为cin默认把空格去调 xff0c 则后面的字符我的理解就是溢出 xff1f 所以报错了 getline功能就比较强大了 xff0c
  • Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

    文章目录 硬件安装Ubuntu Server20 04下载rpiboot工具下载imager刷写系统配置USB配置WIFI 开机安装桌面配置wifi配置串口安装ROS安装mavros安装MAVSDK PythonInternet设置最后 参
  • docker迁移镜像

    docker迁移本地镜像 本文为docker基本镜像操作之一 查看本镜像 docker images 迁移 xff08 拷贝 xff09 本地镜像到其他设备 1 打包 docker save o 路径 目标包名 tar 源镜像名 标签 2
  • C++Linux服务器学习之路——1

    前言 xff1a 为了让所学的计网知识融合于实际 xff0c 让操作系统里的理论去满足工程需求 xff0c 故通过借鉴30dayMakeServer的路线以及进行相应知识点的学习 part1 首先我们要理解socket 为应用层和传输层提供
  • 计网牛客刷图总结

    久不学忘记了 xff0c 1111 1111 61 255 xff0c ip地址是32位二进制组成 xff0c x 26就是说主机号有26位 xff0c 其他都是网络号 所以后面只有2位主机号 xff0c 234 61 11101010 x
  • C++力扣算法刷题算法分析

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Invalid bound statement (not found)问题解决

    在网上基本的解决方案就是查看 namespace有没有对应 xff0c 但是我确定我的路径都是正确的 xff0c 如果发现这类问题可以先尝试确定路径的正确 之后如果还不行 xff0c 我们进行解决 xff1a 首先在target文件中查找是
  • C指针基础普及

    https www programiz com c programming c pointers 先放网站 xff0c 等我有时间再来补我的扩展
  • Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异)

    之前在培训新生的时候 xff0c windows环境下配置opencv环境一直教的都是网上主流的vs studio配置属性表 xff0c 但是这个似乎对新生来说难度略高 虽然个人觉得完全是他们自己的问题 xff0c 加之暑假之后对cmake
  • Spring Aop的使用(含示例)

    介绍 在软件业 xff0c AOP为Aspect Oriented Programming的缩写 xff0c 意为 xff1a 面向切面编程 xff0c 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术 AOP是OOP的延续
  • 超好用的开发工具-VScode插件EIDE

    EIDE介绍 一款适用于8051 STM8 Cortex M RSCv的单片机开发环境 在 vscode上提供8051 xff0c STM8 Cortex M xff0c RISC V 项目的开发编译烧录等功能 使用文档 xff1a 简介
  • 直流编码电机双闭环(速度+角度)控制

    目录 1 PID框图 2 pid控制器的表达式 3 传感器数据获取 4 硬件设计 5 工程配置 6 软件部分程序配置 7 调参过程记录 本文已更新 xff0c 加上曲线调试 xff0c 更好效果 xff0c 更多内容 xff0c 详情 xf
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带