OpenMV初体验

news2025/1/23 8:04:35

Openmv初体验

OpenMV IDE

OPENMV4-STM32H743


import sensor, image, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565) # 图像彩色/灰白
sensor.set_framesize(sensor.QVGA) # 图像大小
sensor.skip_frames(time = 2000) # 几秒后开始或跳过几帧
cnt = 0
#sensor.set_windowing((120, 120)) # 设置中间窗口区域
# 翻转
sensor.set_hmirror(True)
#sensor.set_vflip(True)
print(sensor.width(), sensor.height(), sep=" ")
print(sensor.get_pixformat())
ROI = [60, 50, 60, 60]
Red = (255, 0, 0)
Green = (0, 255, 0)
Blue = (0, 0, 255)
White = (255, 255, 255)
while True:
    cnt += 1
    img = sensor.snapshot() # 获取图像
    static = img.get_statistics(roi = ROI)
    #time.sleep(1.0)
    #print(type(img))
    #print(img.get_pixel(160, 120))
    #img.set_pixel(160, 120, (255, 255, 0))
    #img.invert() # 二值化图像
    if cnt == 20:
        cnt = 0
        #print(img.width(), img.height(), img.format(), img.size(), sep=" ")
        color_l = static.l_mode()
        color_a = static.a_mode()
        color_b = static.b_mode()
        print(color_l, color_a, color_b, sep=" ")
    # 绘图
    img.draw_rectangle(ROI, color=Red, thickness=5) # (x, y, w, h)
    #img.draw_line((10, 10, 100, 200), color=Green) # x0, y0, x1, y1
    img.draw_circle(160, 120, 50, color=Blue, fill=True) # x, y, r
    img.draw_cross(10, 20, size=10, color=White)
    img.draw_string(100, 150, "OpenMV", color=Red)

image-20230415212017939

颜色识别

import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
w = sensor.width()
h = sensor.height()
sensor.set_windowing((h//2, h//2))
clock = time.clock()
red = (29, 61, 32, 127, -128, 127) # 阈值
blue = (32, 61, 10, 44, -128, -53)
while(True):
    clock.tick()
    img = sensor.snapshot()
    #print(clock.fps())
    blobred = img.find_blobs([red],merge=True)
    blobblue = img.find_blobs([blue],merge=True)
    for blob in blobred:
        #print(blob)
        img.draw_rectangle(blob.rect(), thickness=5, color=(0, 255, 255))

    for i in blobblue:
        #print(blob)
        img.draw_rectangle(i.rect(), thickness=5, color=(255, 0, 255))

image-20230415222308909

{"x":12, "y":16, "w":28, "h":24, "pixels":584, "cx":25, "cy":28, "rotation":3.102839, "code":1, "count":1, "perimeter":142, "roundness":0.815352}

blob有多个方法:

  • 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)。如果色块类似一个铅笔,那么这个值为0180°。如果色块是一个圆,那么这个值是无用的。如果色块完全没有对称性,那么你会得到0360°,也可以通过blob[7]来获取。

  • blob.code() 返回一个16bit数字,每一个bit会对应每一个阈值。举个例子:

    blobs = img.find_blobs([red, blue, yellow], merge=True)

如果这个色块是红色,那么它的code就是0001,如果是蓝色,那么它的code就是0010。注意:一个blob可能是合并的,如果是红色和蓝色的blob,那么这个blob就是0011。这个功能可以用于查找颜色代码。也可以通过blob[8]来获取。

  • blob.count() 如果merge=True,那么就会有多个blob被合并到一个blob,这个函数返回的就是这个的数量。如果merge=False,那么返回值总是1。也可以通过blob[9]来获取。
  • blob.area() 返回色块的外框的面积。应该等于(w * h)
  • blob.density() 返回色块的密度。这等于色块的像素数除以外框的区域。如果密度较低,那么说明目标锁定的不是很好。
    比如,识别一个红色的圆,返回的blob.pixels()是目标圆的像素点数,blob.area()是圆的外接正方形的面积。

颜色识别亮灯:

import sensor, image, time, pyb

#将蓝灯赋值给变量led
led = pyb.LED(3) # Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
usb = pyb.USB_VCP() # This is a serial port object that allows you to
# communciate with your computer. While it is not open the code below runs.

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
w = sensor.width()
h = sensor.height()
sensor.set_windowing((h//2, h//2))
clock = time.clock()
red = (29, 61, 32, 127, -128, 127)
blue = (32, 61, 10, 44, -128, -53)
clock = time.clock()
while(usb.isconnected()):
    img = sensor.snapshot()
    blobblue = img.find_blobs([blue],merge=True)
    if len(blobblue) != 0:
        led.on()
    else:
        led.off()
    for i in blobblue:
        img.draw_rectangle(i.rect(), thickness=5, color=(255, 0, 255))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【初试复试第一】脱产在家二战上岸——上交819考研经验

笔者来自通信考研小马哥23上交819全程班学员 先介绍一下自己,我今年初试426并列第一,加上复试之后总分600,电子系第一。 我本科上交,本科期间虽然没有挂科但是成绩排名处于中下游水平。参加过全国电子设计大赛,虽然拿…

【机器学习】P20 模型的诊断 - 验证集

从本节博文开始,将会有几篇博文的内容探究的是如何对模型进行评估,模型是好是坏?模型能否拟合? P20 (本篇)模型的诊断,验证集P21 正则化P22 过拟合和欠拟合的探究2,偏差与方差P23 一…

【内摹访谈】谈谈AI爆发前夜的B端设计

本文来自摹客产品设计团队(MPD)的设计专栏“内摹访谈”。专栏介绍:专栏名称来源于西方美学理论「内摹仿说」,意指审美活动与摹仿活动紧密相连,审美不只针对表象动作,其核心在于由物及我,从表观带…

MiniGPT-4开源了,史无前例的AI图片内容分析,甚至能用于逻辑验证码推理识别

MiniGPT-4: github库 https://github.com/Vision-CAIR/MiniGPT-4 在线测试网址 https://minigpt-4.github.io/ 案例一:分析图片内容 出结果较慢,建议图片小一点,并且提示文字尽可能简短 The man in the image is wearing a white tank…

kotlin协程flow retryWhen当功能函数加载失败后重试(3)

kotlin协程flow retryWhen当功能函数加载失败后重试&#xff08;3&#xff09; import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlocking import java.lang.NullPointerExceptionfun main(args: Array<String>) {runBl…

电脑卡顿反应慢怎么处理?电脑提速,4个方法!

案例&#xff1a;电脑卡顿反应慢怎么处理&#xff1f; 【快帮帮我&#xff01;我的电脑现在越用越卡了&#xff0c;有时候光是打开一个文件都要卡好几分钟&#xff0c;我真的太难了&#xff0c;有什么可以加速电脑反应速度的好方法吗&#xff1f;万分感谢&#xff01;】 随着…

产品知识沉淀

梁宁-产品思维30讲 看一个人或看一个产品&#xff0c;可以由表及里的五层来做观察和判断&#xff1a;感知层、角色层、资源层、能力圈和存在感 存在感之于人就好像生存之于动物一样&#xff0c;是触发情绪和推动行动的开关。 动物的状态和情绪&#xff0c;都是关乎它的生存需…

数据结构---八大排序

专栏&#xff1a;算法 个人主页&#xff1a;HaiFan. 本章内容为大家带来排序的相关内容&#xff0c;希望大家能多多支持。 八大排序 前言插入排序直接插入排序希尔排序(缩小增量排序) 选择排序选择排序堆排序 交换排序冒泡排序快速排序hoare版挖坑版前后指针法 归并排序 前言 …

Python中的@cache有什么妙用?

Python中的cache有什么妙用&#xff1f; 本文同步投给#创作纪念日#活动&#xff0c;2019年4月8日我在C站发了第一篇博文&#xff0c;至今200多篇了&#xff0c;感兴趣可以访问我的主页&#xff1a;小斌哥ge。 看到官方发的私信&#xff0c;是鼓励博主写一些感悟&#xff0c;由于…

【MySQL】数据库基础知识

1、数据库简介 1.1 什么是数据库 数据库其实就是"基于数据结构"实现出来的一类软件&#xff0c;这类软件可以用来对数据进行管理&#xff0c;管理也就是对数据进行增删查改等一些操作 为什么说数据库是基于数据结构实现出来的"一类软件"呢&#xff1f; 答&…

本地化部署大语言模型 ChatGLM

本地化部署大语言模型 ChatGLM 本地化部署大语言模型 ChatGLM前期筹备GitHub 基础包语言模型文件基础配置显存查看方法 Anaconda 模块Anaconda 环境创建根目录操作基础依赖加载transformers 和 protobuf 库加载Pytorch 源修改依赖库补充补充依赖 pypi 配置cchardet 依赖错误解决…

开放式耳机好用吗,盘点几款口碑不错的开放式耳机

​开放式耳机作为一种全新的耳机形态&#xff0c;已经成为了当前市场上非常火爆的一款产品。由于无需入耳佩戴&#xff0c;可以很好的避免了耳膜受到损伤&#xff0c;而且也能够让我们在佩戴眼镜时也能够正常使用。加上开放式耳机的音质和舒适度都要优于其他类型的耳机&#xf…

全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成

ABB是数字行业的技术前沿者&#xff0c;拥有四项主营业务&#xff1a;电气化&#xff0c;工业自动化&#xff0c;运动控制以及机器人和离散自动化。ABB总部位于瑞士苏黎世&#xff0c;业务遍及100多个国家&#xff0c;拥有约105&#xff0c;000名员工。2021年&#xff0c;该公司…

dockerDesktop依赖wsl,及docker可视化推荐Portainer

也是今天无意中发现的Portainer 之前采用的1panel和宝塔做运维可视化 现在换成dockerPortainer 宝塔和1panel和portranier对比 宝塔广告太多&#xff0c;而且不适合深入了解运维技术 1panel个人感觉无广告颜值很高&#xff0c;但是还是有局限&#xff0c;不适合深入了解运维…

MAC 用 brew安装 mysql并且设置开机自启动

目录 一.安装 mysql 1.安装 mysql 2.启动 mysql 3.关闭 mysql 4.初次安装需要修改 root 密码 5.验证密码 二.设置开机启动 1.找到plist 文件 2.将启动文件 plist 复制到 LaunchAgents目录 3.验证 一.安装 mysql 1.安装 mysql 1.安装默认版可以直接执行安装命令 brew…

上岸美团,我的面经!

作者&#xff1a;阿秀 校招八股文学习网站&#xff1a;https://interviewguide.cn 这是阿秀的第「257」篇原创 小伙伴们大家好&#xff0c;我是阿秀。 欢迎今年参加秋招的小伙伴加入阿秀的学习圈&#xff0c;目前已经超过 2200 小伙伴加入&#xff01;去年认真准备和走下来的基…

GreenPlum (一) 初识

在开始了解GreenPlum之前&#xff0c;应该对这种产品的诞生有基本的了解&#xff0c;搭建一个基本的知识框架。对以下历史有基本了解之后应对下文术语进行基本阅读。 ​ 阅读目标: 阅读完成后需要对相关术语以及greenplum有基础理解。 文案基本互联网相关blog进行整体汇总&…

苹果跌倒检测新专利获得,结合苹果Find My可准确定位

苹果首款“跌倒检测”功能专利可追溯到 2018 年公示的 20190103007&#xff0c;后续又获得了至少 5 项相关专利。根据美国商标和专利局&#xff08;USPTO&#xff09;上周四公示的专利&#xff0c;苹果公司再次获得了一项“跌倒检测”功能专利。 苹果在报告中表示&#xff0c…

亚马逊云科技让你在云端发现企业穿越周期稳健发展的力量

2023年3月29日「哈佛商业评论-未来管理沙龙」活动盛大启幕&#xff0c;此次沙龙活动以穿越周期的力量为主题方向&#xff0c;以解码跨国企业持续增长源动力为主旨&#xff0c;希望为企业高层管理者们带来更多思考和启迪。 作为特邀嘉宾&#xff0c;亚马逊全球副总裁、亚马逊云…

内存的分区

目录 内存分区介绍 区域功能 内存分区运行前后的区别 运行之前&#xff08;代码区数据区未初始化数据区&#xff09; 运行之后&#xff08;代码区数据区未初始化数据区栈区堆区&#xff09; 缓冲区 缓冲区有什么用&#xff1f; 缓冲区的三种类型 缓冲区的刷新 内存分布图 栈与堆…