OpenMV——色块追踪

news2024/11/24 4:52:46

Python知识:

1.给Python的列表赋值:

定义一个元组时就是 元组a = (1,2,…)
元组中可以只有一个元素,但是就必须要加一个 “ , ”
如 a = (2,)

而列表的定义和元组类似,只是把()换成[]:

#那么下面的colour_1 ~ 3属于元组,只能进行一次赋值就是初始化的时候,之后不允许修改
colour_1 = (51, 17, -4, -65, 45, -53)
cplour_2 = (51, 17, -4, -65, 41, -51)
cplour_3 = (2, 17, -4, -65, 41, -51)
#而thresholds是一个列表,这时候这个列表就有了三个颜色的阈值信息,与元组不同列表后续能够进行添加和删除
thresholds = [cplour_1,cplour_2,cplour_3]

thresholds = [cplour_1,cplour_2]

阈值:

一个颜色的阈值是这样的:
red = (minL, maxL, minA, maxA, minB, maxB)

阈值选择工具:

下面是官方手册的内容:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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)

函数参数介绍(来自星瞳科技官方手册):
注意:
1.上面给的是函数的声明,参数从x_stride 到 merge_cb都是默认参数,如果不进行更改,实参的值就是上面的默认值,使用时最基本的就是传入一个颜色阈值赋值给普通形参thresholds,thresholds是一个列表,如果你只给他一个颜色的阈值他就只返回一个颜色的色块信息,如果你给他传入一个包含多个颜色的阈值元组,他就能识别多个颜色并返回对应列表中的颜色的色块信息。
2.ROI=Auto在图像处理或机器视觉的上下文中,通常表示感兴趣区域(Region of Interest, ROI)被设置为自动选择或自动检测。这里的“Auto”意味着不需要手动指定ROI的具体位置(如左上角的坐标、宽度和高度),而是由算法或软件自动根据一定的规则或条件来确定ROI。 但是注意在传入实参时并不能出现 roi = Auto
例如:

blobs = img1.find_blobs([red],roi = auto)
#只能
blobs = img1.find_blobs([red],)
#或者
blobs = img1.find_blobs([red],roi = (1123))

#然后列表[red] 与 (1,1,2,3)将会被作为实参分别传给thresholds与roi,其他参数就会被赋默认值,如果不传(1,1,2,3),那么roi会被OpenMV自己设置的方法进行赋值

在这里插入图片描述

find_blobs函数返回值:

来自星瞳科技官方手册

  1. find_blobs函数根据传入的颜色列表thresholds,然后对保存在一帧照片数据的图像对象img进行查找,

  2. 如果查找到颜色列表thresholds = [colour_1,colour_2,colour_3]中的colour_1颜色的色块就会返回该色块的信息给列表blobs,

  3. 那么检测到三个色块,那么列表blobs就会有三个元素
    如:blobs = [blob_1,blob_2,blob_3],然后每个元素blob就会包含色块的信息(x坐标,中心坐标,色块的矩形的大小等等)

有了色块信息之后:

来自星瞳科技官方手册

根据色块信息进行色块追踪:

举例:
在这里插入图片描述

import sensor#引入感光元件的模块

# 设置摄像头
sensor.reset()#初始化感光元件
sensor.set_pixformat(sensor.RGB565)#设置为彩色
sensor.set_framesize(sensor.QVGA)#设置图像的大小
sensor.skip_frames(n = 10)#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
sensor.set_auto_gain(False)
sensor.set_auto_whitebal(False)
green = (51, 17, -4, -65, 45, -53)
# 一直拍照
while(True):
    img1 = sensor.snapshot()#拍摄一张照片,img为一个image对象
    blobs = img1.find_blobs([green])
    for blob in blobs:
        print(blob.cx())
        rect_tuple = blob.rect()
        img1.draw_rectangle(rect_tuple, color=(255,0,0))
  1. 我通过阈值选择工具获取到一个颜色阈值green = (51, 17, -4, -65, 45, -53)

  2. 然后拍了一帧照片并将该照片的信息赋值给img1 = sensor.snapshot()#拍摄一张照片,img为一个image对象

  3. 然后对img1照片进行色块寻找,要寻找的色块的颜色阈值就是thresholds = [red],我只传入了一个颜色阈值也可以传入多个thresholds = [red,blue,green],

  4. 然后find_blobs函数就在这一帧照片img1中查找是否出现颜色列表thresholds中的元素的颜色,如果出现将出现的色块的信息返回赋值给列表blobs,如果一帧图片中出现三个色块,那么列表blobs就会有三个元素,分别代表那三个色块的信息

  5. 而通过for循环,blob会依次赋三个色块的值,第一次循环就是色块1

  6. 然后对blob使用.rect方法,返回色块1的外框——矩形元组(x, y, w, h)并赋值给rect元组rect_tuple = blob.rect()

  7. img1.draw_rectangle(rect_tuple, color=(255,0,0)),然后在图像数据img1中使用.draw_rectangle的方法,在img1中根据矩形元组(x, y, w, h)和颜色color=(255,0,0)画出一个红色的矩形框

注意:
IDE中的帧缓冲区是缓冲拍到的帧图像,如果只拍了一次那就只有一帧图像,如果一直拍,那么前一帧的图像就会被新拍的覆盖,所以其实是在前一帧的照片上画出色块,然后才显示下一帧,但是如果你只拍1帧又很难识别到色块,我拍10帧就会有帧缓冲区显示我程序中要画的矩形

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

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

相关文章

【leetcode C++】动态规划

动态规划解题思路 1. 状态表示 dp表 里面的值所代表的含义(1.根据题目要求得出 2.经验 题目要求 3.分析问题过程中,发现重要子问题) 2. 状态转移方程 dp[i] 等于什么 3. 初始化 保证填表不越界 4. 填表顺序 为了填写该状态的时候&am…

02 Docker基本管理

2.1 Docker镜像管理 2.1.1 案例:构建各类Docker镜像服务 2.1.2 案例环境 主机 操作系统 主机IP地址 服务器 Centos7.3x86-64 192.168.10.100 2.1.3 案例拓扑原理 通过 Dockerfile 创建常见应用镜像,Dockerfile 的构成如图 2.3 所示 图 2.1 Doc…

为什么说开放式耳机对耳朵更友好?性价比高的四款蓝牙耳机推荐

开放式耳机对耳朵更友好,主要体现在以下方面: 减少耳部闷热和潮湿:开放式耳机的开放结构,不会完全封闭耳朵,使得空气能够自由流通。这样可以有效减少因长时间佩戴导致的耳部闷热和潮湿情况。而耳部处于闷热潮湿的环境…

基于CNN-BiGUR的恶意域名检测方法

本文提出了一种基于 CNN 和 BiGRU 的恶意域名检测方法 CNN-BiGRU-Focal。利用卷积神经网络(CNN)提取域名字符的局部上下文特征。利用双向门控循环单元网络(BiGRU)捕捉域名字符序列的时间序列特征。同时,引入改进的 Foc…

十三、MySQL高级—读写分离(6)

🌻🌻 目录 一、Mycat 介绍1.1 是什么1.2 干什么的1.3 原理 二、安装启动2.1 解压缩文件拷贝到linux下 /usr/local/2.2 三个文件2.3 启动前先修改schema.xml(配置)2.4 再修改server.xml2.5 验证数据库访问情况2.6 启动程序2.7 启动…

Hive SQL子查询应用

目录 环境准备看如下链接 子查询 查询所有课程成绩均小于60分的学生的学号、姓名 查询没有学全所有课的学生的学号、姓名 解释: 没有学全所有课,也就是该学生选修的课程数 < 总的课程数。 查询出只选修了三门课程的全部学生的学号和姓名 环境准备看如下链接 环境准备h…

应用层 思维导图

绪论&#xff1a; ​“有志者自有千计万计&#xff0c;无志者只感千难万难。” 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 思维导图能很好的帮助到我们去学习和理解记忆知识&#xff0c;当我们对一个知识有了一定的框架后就能有逻辑性的去…

关于我的阿里云服务器被入侵 - 分析报告

目录 引言一、事件概述1. 异地登陆2. 挖矿程序3. 密钥未注册4. 勒索病毒 二、问题分析1. 异地登陆2. 挖矿程序3. 密钥登录失效&#xff08;密钥未注册&#xff09;4. 勒索病毒 三、安全知识讲解1. 密钥登录 四、总结 引言 因为是第一次租云服务器&#xff0c;所以出现了很多的…

Clion配置ESP32开发,一文就够了

目录 1.下载ESP-IDF2.配置ESP32开发环境2.1方法1:Clion官方手册2.2方法2: 3.测试Clion开发ESP32的环境4.关于Clion的monitor无法正常运行的解决方法 我这里使用的CLiion版本是2023.2.1&#xff0c;网上激活方法有很多&#xff0c;这里就不赘述。 电脑是WIn11系统。 1.下载ESP-I…

无线感知会议系列【1】【增强无线感知应用的鲁棒性】

前言&#xff1a; 这个是2021年 泛在可信智能感知论坛&#xff0c;汤战勇 &#xff08;西北大学物联网研究院 )教授的 一个讲座《wireless signals like WiFi, RFID and (ultra) sound as a powerful modality for ubiquitous sensing》 参考连接&#xff1a; 4.见微知萌—…

02_硬件基础知识学习

通过上一课的学习&#xff0c;我们貌似成功的点亮了一个 LED 小灯&#xff0c;但是有一些知识大家还没彻底搞明白。单片机是根据硬件电路图的设计来编写代码的&#xff0c;所以我们不仅仅要学习编程知识&#xff0c;还要学习基本的硬件知识&#xff0c;这节课我们就要来穿插介绍…

萱仔环境记录——git的使用流程:以上传一个项目进入GitHub仓库为例子

前段时间我已经不使用学校的电脑了&#xff0c;在自己的笔记本上安装了git&#xff0c;准备好好把我这几年做的项目整理一下进行开源&#xff0c;由于前几次的面试&#xff0c;一些公司考核到了git的用法&#xff0c;虽然平时我也在使用git对自己的项目进行管理&#xff0c;但还…

为什么腾讯难以再现《黑神话:悟空》这样的游戏大作?

自《黑神话:悟空》发布以来,它凭借令人惊艳的画面和深入人心的故事情节,迅速在全球范围内收获了大量粉丝。这款游戏的成功,不仅让全球玩家看到了国产游戏的新高度,也让许多人开始好奇:作为中国游戏行业的巨头,腾讯为什么没能推出类似《黑神话:悟空》这样震撼的作品?今…

c++166面下该过程 向面向对象的转变

#include<iostream> using namespace std; //设计类 属性 函数 //案例一 &#xff1a;立方体 面积和体积 //求两个立方体是否相等 &#xff08;全局函数和成员函数&#xff09; class Cube { private:int m_a;int m_b;int m_c;int m_v;int m_s;public://void setA(int a…

视频剪辑软件大盘点:四款神级工具让你工作更高效!

工作中&#xff0c;视频剪辑是一项不可或缺的技能。而选择一款好用的视频剪辑软件&#xff0c;更是提升工作效率的关键。今天&#xff0c;我就将从功能、易用性、效果以及个人使用感受等方面为大家推荐四款免费的视频剪辑软件&#xff1a; 第一款&#xff1a;福昕视频剪辑 我…

中秋之约,尽在食家巷小程序

中秋&#xff0c;那是一个被月光温柔包裹&#xff0c;被亲情浓浓环绕的节日。在这个象征团圆的日子里&#xff0c;美食就像是情感的纽带&#xff0c;将人们的心紧紧系在一起。而食家巷的美味绝对能让你的中秋更添几分甜蜜。 现在呀&#xff0c;我要给大家推荐一个超级方便的好东…

毫欧表设计整体思路

原因 对于焊接设备的低阻值测量&#xff0c;一般都是mΩ级别的&#xff0c;但万用表的电阻档一般都是以200Ω做为最小档位 设计原理及软件实现设计 设计思路原理图 通过串联在电路中的电流相等&#xff0c;根据阻值和电压的关系得到电阻对应大小 设计中需要考虑的问题 1…

[ccs调试记录]

解决方式&#xff1a;删除code_strat 提示Page0内存不够&#xff0c;找到Page0&#xff0c;根据红叉提示&#xff0c;Ram1内存不足&#xff0c;进行修改 Ram1 length从1000修改为2000&#xff0c;即可&#xff1a;

MIT6.824 课程-PrimaryBackupReplication

Primary Backup Replication 背景 为实现可容错的服务器&#xff0c;主从备份是一种常用的解决方案&#xff1a;在开启了主动备份的系统中&#xff0c;备份服务器的状态需要在几乎任何时候都与主服务器保持一致&#xff0c;这样当主服务器失效后备份服务器才能立刻接管。实现…

计算机网络(二) —— 网络编程套接字

目录 一&#xff0c;认识端口号 1.1 背景 1.2 端口号是什么 1.3 三个问题 二&#xff0c;认识Tcp协议和Udp协议 三&#xff0c;网络字节序 四&#xff0c;socket编程接口 4.1 socket常见API 4.2 sockaddr结构 一&#xff0c;认识端口号 1.1 背景 问题&#xff1a;在进…