openmv中模块解析

2023-05-16

模块解析
1. sensor摄像头模块:包含了感光芯片与图像预处理的各项操作.
sensor.reset()#重置并初始化OpenMV
sensor.set_pixformat(sensor.RGB565)#选择颜色空间与像素格式RGB565/GRAYSCALE,设定选择颜色空间为RGB, 选择像素格式为RGB565.颜色存储红色(8位)绿色(8位)蓝色(8位).各通道的取值范围0-255, RGB565就是R(5位)G(6位)B(5位)相对于普通的RGB进行压缩
sensor.set_framesize(sensor.QVGA)#选择窗口分辨率为320*240,VGA640×480,QQVGA160×120
sensor.skip_frames([n, time])# skip_frame() 一共有两种传参方式, 一种是设定跳过的帧数n:sensor.skip_frame(20),一种是指定等待的时间time单位为ms,sensor.skip_frames(time = 2000)
img = sensor.snapshot() #截取当前sensor读取的画面,返回一个Image对象,赋值给img变量
2. time计时模块,micropython的time模块与python标准库的time模块不是一个包, 这里的time模块主要起计时的作用,用于追踪过去的时间。
clock = time.clock()#创建一个 clock实例。
clock.tick()#开始计时,是开始计时追踪过去的时间。此操作就等同于摁一下手里的秒表,开始计时。
clock.fps()#这个函数做的事情是记录从clock.tick()开始。 中间做了一些其他操作, 然后到执行到clock.fps()这个函数之间一共花费了多久的时间, 我们记为t.然后再将这个时间t转换为帧率fps.
3. image图像基本运算模块
image.get_pixel(x, y):获取一个像素点的值,对于灰度图: 返回(x,y)坐标的灰度值,对于彩色图: 返回(x,y)坐标的(r,g,b)的tuple.
image.set_pixel(x, y, pixel):设置一个像素点的值,img.set_pixcel(10,10,(255,0,0))
image.width()返回图像的宽度(像素)image.height()返回图像的高度(像素)image.size()返回图像的大小(byte)
image.difference(image)从这张图片减去另一个图片
image.draw_line((10,10,20,30), color=(255,0,0))在图像中画一条直线line_tuple格式是(x0, y0, x1, y1),(x0, y0)到(x1, y1)的直线。
image.draw_rectangle(rect_tuple, color=White) 在图像中画一个矩形框,rect_tuple 的格式是 (x, y, w, h)。
image.draw_circle(x, y, radius, color=White) 在图像中画一个圆。x,y是圆心坐标,radius是圆的半径
寻找色块:由image.find_blobs返回。
image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge= False, margin=0, threshold_cb=None, merge_cb=None)寻找色块。
       thresholds是颜色的阈值,注意:这个参数是一个列表,可以包含多个颜色。如果你只需要一个颜色,那么在这个列表中只需要有一个颜色值,如果你想要多个颜色阈值,那这个列表就需要多个颜色阈值。注意:在返回的色块对象blob可以调用code方法,来判断是什么颜色的色块。
      roi是“感兴趣区”,格式是(x, y, w, h)的tupple。
      x_stride 就是查找的色块的x方向上最小宽度的像素,默认为2。
      y_stride 就是查找的色块的y方向上最小宽度的像素,默认为1。
      area_threshold 面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉。
      pixels_threshold 像素个数阈值,如果色块像素数量小于这个值,会被过滤掉
      merge 合并,如果设置为True,那么合并所有重叠的blob为一个。 注意:这会合并所有的blob,无论是什么颜色的。如果你想混淆多种颜色的blob,只需要分别调用不同颜色阈值的find_blobs。
     find_blobs对象返回的是多个blob的列表。而一个blobs列表里包含很多blob对象,blobs对象就是色块,每个blobs对象包含一个色块的信息。
     blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h),可以直接在image.draw_rectangle中使用。
     blob.x() 返回色块的外框即目标颜色区域左上顶点的x坐标(int),也可以通过blob[0]来获取。
     blob.y() 返回色块的外框即左上顶点的y坐标(int),也可以通过blob[1]来获取。
     blob.w() 返回色块的外框的宽度w(int),也可以通过blob[2]来获取。
     blob.h() 返回色块的外框的高度h(int),也可以通过blob[3]来获取。
     blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。
     blob.cx() 返回色块的外框的中心x坐标(int),也可以通过blob[5]来获取。
     blob.cy() 返回色块的外框的中心y坐标(int),也可以通过blob[6]来获取。
     blob.rotation() 返回色块的旋转角度(单位为弧度)(float)。如果色块类似一个铅笔,么这个值为0~180°。如果色块是一个圆,这个值是无用的。如果色块完全没有对称性会得到0~360°,也可以通过blob[7]来获取。
     [8]代表与此目标区域交叉的目标个数。
     blob.code() 返回一个16bit数字,每个bit对应一个阈值用来分辨该区域是用哪个颜色阈值识别出来的,也可以通过blob[9]来获取。
寻找直线:直线由image.find_lines , image.find_line_segments 或  image.get_regression返回的。
image.find_lines(roi, x_stride=2, y_stride=1, threshold=1000, theta_margin=25, rho_margin=25)使用霍夫变换查找图像中的所有直线。返回一个 image.line对象的列表。
    roi 是感兴趣区域的矩形元组(x,y,w,h)。如果未指定,ROI即整个图像的图像矩形。操作范围仅限于 roi 区域内的像素。
    x_stride 是霍夫变换时需要跳过的x像素的数量。若已知直线较大,可增加 x_stride 。
    y_stride 是霍夫变换时需要跳过的y像素的数量。若已知直线较大,可增加 y_stride 。
    threshold 控制从霍夫变换中监测到的直线。只返回大于或等于 threshold 的直线。 应用程序的正确的 threshold 值取决于图像。注意:一条直线的模(magnitude)是组成直线所有sobel滤波像素大小的总和。
    theta_margin/rho_margin控制所监测的直线的合并。 直线角度为 theta_margin 的部分和直线p值为 rho_margin 的部分合并。
    该方法通过在图像上运行索贝尔滤波器,并利用该滤波器的幅值和梯度响应来进行霍夫变换。 无需对图像进行任何预处理。但是,清理图像过滤器可得到更为稳定的结果。
image.find_line_segments([roi, merge_distance=0, max_theta_difference=15)使用霍夫转换来查找图像中的线段。返回一个 image.line对象的列表。
    roi 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定, ROI 即图像矩形。
    merge_distance 指定两条线段之间的可以相互分开而不被合并的最大像素数。
    max_theta_difference 是上面 merge_distancede 要合并的的两个线段的最大角度差值。此方法使用LSD库(也被OpenCV使用)来查找图像中的线段。这有点慢,但是非常准确,线段不会跳跃。
image.get_regression(thresholds, invert=False, roi, x_stride=2, y_stride=1, area_threshold=10, pixels_threshold=10, robust=False)函数返回回归后的线段对象line,有x1(), y1(), x2(), y2(), length(), theta(), rho(), magnitude()参数。x1 y1 x2 y2分别代表线段的两个顶点坐标,length是线段长度,theta是线段的角度。magnitude表示线性回归的效果,它是(0,+∞)范围内的一个数字,0代表一个圆。如果场景线性回归的越好,这个值越大。
    对图像所有阈值像素进行线性回归计算。这一计算通过最小二乘法进行,通常速度较快,但不能处理任何异常值。 若 robust 为True,则使用Theil-Sen线性回归算法,它计算图像中所有阈值像素的斜率的中位数。 若在阈值处理后有太多像素,即使在80x60的图像上,这个O(N^2)操作也可能将您的FPS降到5帧以下。 但是,只要阈值转换后的像素数量较少,即使在高达30%的阈值像素是异常值的情况下也依然有效,鲁棒性好。https://openmv.io/blogs/news/linear-regression-line-following
    thresholds 是元组列表。 [(lo, hi), (lo, hi), ..., (lo, hi)] 定义你想追踪的颜色范围.对于灰度图像,每个元组需要包含两个值 - 最小灰度值和最大灰度值.仅考虑落在这些阈值之间的像素区域. 对于RGB565图像,每个元组需要有六个值(l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) - 分别是LAB通道的最小值和最大值,如果元组大于六个值,则忽略其余值。相反,如果元组太短则假定其余阈值处于最大范围。
    invert 反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。
    roi 是感兴趣区域的矩形元组(x,y,w,h)。如果未指定,ROI即整个图像的图像矩形。 操作范围仅限于 roi 区域内的像素。
    x_stride 是调用函数时要跳过的x像素数。
    y_stride 是调用函数时要跳过的y像素数。
    如果回归后的边界框区域小于 area_threshold ,则返回None。
    如果回归后的像素数小于 pixel_threshold ,则返回None。

3. pyb各种外设模块
pyb.LED(2)#LED灯亮,LED(1) -> 红LED,LED(2) -> 绿LED,LED(3) -> 蓝LED,LED(4) -> 红外LED,两个
pyb.millis() # 获取从启动开始计时的毫秒数
from pyb import UART串口信息,uart = UART(3, 19200)

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

openmv中模块解析 的相关文章

  • OpenMV巡线

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

    openmv是双串口
  • openmv中模块解析

    模块解析 1 sensor摄像头模块 xff1a 包含了感光芯片与图像预处理的各项操作 sensor reset 重置并初始化OpenMV sensor set pixformat sensor RGB565 选择颜色空间与像素格式RGB5
  • 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
  • pid摄像头循迹(opencv和openmv)

    pid摄像头循迹 xff08 opencv和openmv xff09 用摄像头进行循迹的方法参考硬件选型方面软件思路一 图像预处理 xff1a 代码部分二 线性拟合opencv线性拟合 xff1a 实际在树莓派上运行时 xff0c 帧率也比
  • 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学习day2——AprilTag

    仅作为个人学习 xff0c 原文地址 xff1a 链接 link AprilTag的简介 AprilTag是一个视觉基准系统 xff0c 可用于各种任务 xff0c 包括AR xff0c 机器人和相机校准 这个tag可以直接用打印机打印出来
  • 使用OPENMV控制云台自动追踪Apriltag,测出与Apriltag距离并且通过串口发送给单片机。

    使用openmv控制云台自动跟踪Apriltag xff0c 并且将openmv与Apriltag距离通过串口发送到单片机 如果有openmv的同学直接将main py和pid py复制到flash中就可以了 注意 xff01 Aprilt
  • 通过openmv生成apriltag标签

    Apriltag官网提供的tag图片分辨率很低 xff0c 完全无法使用 xff0c 通过openmv生成apriltag标签 生成方法如下 xff1a openmv IDE的下载与安装 openmv官方提供了各种版本的IDE xff0c
  • 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

    串口通信 K210与STM32串口通信 K210与OpenMV串口通信 串口通信前言为何需要串口通信 K210如何进行串口通信K210串口配置K210串口发送相关定义K210串口发送测试K210串口接收相关定义K210串口接收测试 STM3
  • OPENMV结合PIX飞控实现四轴定点 循迹 2017电赛

    本文章代码已上传Github xff1a https github com Kevincoooool 2017 Follow 有兴趣的可以加个STAR 自从17年国赛之后 xff0c 自己做了openmv xff0c 加了很多群 xff0c
  • openmv探索_4_AprilTag标记追踪

    原理及代码 AprilTag标记追踪 空间坐标系的建立 以镜头中心为坐标系原点 xff0c 建立空间坐标系 图2 1 空间坐标系 旋转角度 xff08 参考系是上图中的坐标系 xff09 1 初始状态 图3 1 物体摆放的初始位置 上图的
  • OpenMV:23串口发送数据

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

    OpenMV入门 xff0c 从入门到入坟 gt lt 此文章大部分内容取自OpenMV官方中文参考文档 详情看OpenMV官方中文参考文档 文章目录 一 sensor snapshot 拍一张照片二 image find blogs 查找
  • 通过Python调用OpenMV识别小球获取坐标

    OPenMV介绍 OpenMV是基于Python的嵌入式机器视觉模块 xff0c 目标是成为机器视觉界的 Arduino 它成本低易拓展 xff0c 开发环境友好 xff0c 除了用于图像处理外 xff0c 还可以用Python调用其硬件资
  • 【OpenMv小车】OpenMv追小球的小车之pid调用

    pid py gt gt https github com wagnerc4 flight controller blob master pid py openmv 官网 xff1a http book openmv cc project
  • Openmv学习day1——色块识别

    find blobs函数 image find blobs thresholds roi 61 Auto x stride 61 2 y stride 61 1 invert 61 False area threshold 61 10 pi
  • 基于STM32F407的人脸追踪

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

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

随机推荐