对openmv色块查找的思考笔记
引言
要实现色块查找,首先我们是在RGB格式下对红,黄蓝三原色的值域进行规定,例如:red = (minL, maxL, minA, maxA, minB, maxB)
通常我们在程序中使用thresholds来定义域值,它的参数可以是多个颜色的列表,例如:thresholds = [(255,0,0,0),(255,255,0,0),(0,0,0,255)]
在定义好所需要查找的色块阈值后,需要对图像进行实例化:img = sensor.snapshot() #这里需要解释的是snapshot()是快照函数,可以截取下视频流中的一个画面
随后调用find_blobs()函数,它可以帮我们找到img这个画面中所有符合值域的像素点。
find_blobs()参数
- roi(感兴趣区:
roi是一个元组, roi = (x, y, w, h),代表从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野。
- x_stride(查找x方向上最小宽度的像素,默认=2)
- y_stride(查找y方向上最小宽度的像素,默认=1)
- invert(反转值域,在值域以外的区域进行查找)
- area_threshold(面积值域,若色块面积小于这个值时,色块会被过滤掉)
- pixels_threshold(像素值域,当色块像素小于这个值时,色块会被滤掉)
- merge(当它为 True的时候,把所有色块合并为一个)
- margin(边界值,当两个blob的间距为一个像素点时,它们会被合并)
函数
当我们找到了色块所在位置后,现在则是把它们用圆圈或者矩形框围起来,这里引出了openmv画图的函数
- 画矩形:draw_rectange()
- 画圆形:draw_circle()
- 画十字:draw_cross()
以上函数的参数都可以引用blobs的参数[引用]
blobs参数
[0] 代表识别到的目标颜色区域左上顶点的x坐标,
[1]代表左上顶点y坐标
[2]代表目标区域的宽
[3]代表目标区域的高
[4]代表目标区域像素点的个数
[5]代表目标区域的中心点x坐标
[6]代表目标区域中心点y坐标
[7]代表目标颜色区域的旋转角度(是弧度值,浮点型,列表其他元素是整型)
[8]代表与此目标区域交叉的目标个数
[9]代表颜色的编号(它可以用来分辨这个区域是用哪个颜色阈值threshold识别出来的)
以上,我们就完成了识别色块并将其用矩形或圆圈框起来的功能了,以下是完整代码:
# 单颜色组合识别例程
#
# 这个例子显示了使用OpenMV的单色代码跟踪。
#
#颜色代码是由两种或更多颜色组成的色块。下面的例子只会跟踪同时具有以下两种颜色的彩色物体。import sensor, image, time# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
# The below thresholds track in general red/green things. You may wish to tune them...
thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds -> index is 0 so code == (1 << 0)(30, 100, -64, -8, -32, 32)] # generic_green_thresholds -> index is 1 so code == (1 << 1)
# 当“find_blobs”的“merge = True”时,code代码被组合在一起。sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False) # must be turned off for color tracking
clock = time.clock()# 只有比“pixel_threshold”多的像素和多于“area_threshold”的区域才被
# 下面的“find_blobs”返回。 如果更改相机分辨率,
# 请更改“pixels_threshold”和“area_threshold”。 “merge = True”合并图像中所有重叠的色块。while(True):clock.tick()img = sensor.snapshot()for blob in img.find_blobs(thresholds, pixels_threshold=100, area_threshold=100, merge=True):if blob.code() == 3: # r/g code == (1 << 1) | (1 << 0)img.draw_rectangle(blob.rect())img.draw_cross(blob.cx(), blob.cy())print(clock.fps())
总结
主要是理解思路,代码在官网都有,对值域的选择以及最后逻辑的处理会影响你最后的效果(如果你在此之后也要做颜色跟踪)
对openmv色块查找的思考笔记相关推荐
- OpenMV色块寻找
OpenMV入门,从入门到入坟>_< 此文章大部分内容取自OpenMV官方中文参考文档 详情看OpenMV官方中文参考文档 文章目录 一.sensor.snapshot()拍一张照片 二. ...
- 与小弟子交谈:引申的思考笔记[第一次编辑]
#----------------------------------------------------------# # ====> 红色字体 -特指煮酒个人所见.加粗则为需要重点注意. ...
- Android第一行代码学习思考笔记(碎片、广播、持久化技术和Android数据库)
Android第一行代码学习思考笔记(碎片.广播.持久化技术和Android数据库 第四章 手机平板要兼顾--探究碎片 4.1碎片是什么(Fragment) 4.2碎片的使用方式 4.2.1碎片的简单 ...
- 达利欧《原则》读书思考笔记
子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之".保持谦虚好学的态度,书是一定要多读的.书,是别人思想的精华.特别是一些好书,肯定有它的独特之处.然而尽信书则不如无书, ...
- 【openmv学习笔记:1】色块查找
目录 (一)显示图像 (二)标记色块 2.1 `find_blobs`函数 2.2 颜色阈值 2.3 标记 (一)显示图像 星瞳科技openmv官方资料 嵌入式图像处理环境: 硬件平台:OpenMV4 ...
- Openmv实现图像中最大色块查找
目录 前言 一.前期准备 二.使用步骤 1.引入库 2.初始化 3.元件初始化 4.色块分类 前言 本例程实现对图像中红 黄 绿三种不同颜色色块的分类 一.前期准备 openmv IDE安装及熟悉,详 ...
- 算法基础:常用的查找算法知识笔记
1.查找表和查找效率的概念 查找表是指由同一类型的数据元素构成的集合.分为静态查找表和动态查找表. 1.1 静态查找表 1.查询某个特定元素是否在查找表的集合当中 2.查询某个特定元素的各种属性 1. ...
- 《现代操作系统》精读与思考笔记 第一章 引论
本系列博文是<现代操作系统(英文第三版)>(Modern Operating Systems,简称MOS)的阅读笔记,定位是正文精要部分的摘录和课后习题精解,因此不会事无巨细的全面摘抄,仅 ...
- Linux下文件查找命令find笔记
在Linux命令下如果需要快速自己系统所需要处理的文件,可以通过find命令快速进行检索. 如果想在某个路径下查找相应的文件可以执行如下命令: find path -name filename # p ...
最新文章
- 【我的Android进阶之旅】解决Android Studio启动时报错:Java 1.8 or later is required.
- C++入门指南及实战 第一步 概述及经典HelloWorld
- mysql分组查询和子查询语句_6.MySQL分组聚合查询,子查询
- 调试利器:浏览器 Logger
- Python基础入门_3条件语句和迭代循环
- 合理设置apache的连接数及进程工作方式
- 【转】写给想学习自动化测试的新人
- Error: Plugin/Preset files are not allowed to export objects, only functions……
- LeetCode Week 5:第 41 ~ 50 题
- Struts2之ajax初析
- iOS开发经验总结(上)
- linux文件权限的设置命令
- react ssr方法
- JAVA_SE_Day13
- 【寒江雪】UV+Depth信息计算世界坐标
- IMO 2017 T4解答
- 视频人员行为识别(Action Recognition)
- 有没有英语语音测试软件,没有雅思的高分女朋友虐你英语,就善用手机的app录音自测练习...
- 速卖通流量新赛道,AE Mall商家享有权益和招商标准,看这篇文章就好了
- JavaWeb购物车项目二
热门文章
- 关于fastapi框架的异步
- Must call super constructor in derived class before accessing or returning from derived const
- BlockingQueue实例
- python网格交易_网格交易(期货)
- mysql to_days() 逆向函数_mysql的 TO_DAYS() 函数应用实例
- 2007年生日祝福:宝贝,谢谢您陪伴我走过人生风风雨雨,祝您2007年生日快乐!
- jQuery源码解析(架构与依赖模块)第一章 理解架构
- Java MD5和SHA256等常用加密算法
- 巧妙隐藏Word文档中指定文字内容
- db2数据库(db2数据库安装)