【OpenMv】颜色识别
一、颜色识别
# 色块监测 例子
#
# 这个例子展示了如何通过find_blobs()函数来查找图像中的色块
# 这个例子查找的颜色是深绿色import sensor, image, time# 颜色追踪的例子,一定要控制环境的光,保持光线是稳定的。
green_threshold = ( 0, 80, -70, -10, -0, 30)
#设置绿色的阈值,括号里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA,
# maxA, minB, maxB),LAB的值在图像左侧三个坐标图中选取。如果是灰度图,则只需
#设置(min, max)两个数字即可。sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些
sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,一定要关闭白平衡。
clock = time.clock() # 追踪帧率while(True):clock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # 从感光芯片获得一张图像blobs = img.find_blobs([green_threshold])#find_blobs(thresholds, invert=False, roi=Auto),thresholds为颜色阈值,#是一个元组,需要用括号[ ]括起来。invert=1,反转颜色阈值,invert=False默认#不反转。roi设置颜色识别的视野区域,roi是一个元组, roi = (x, y, w, h),代表#从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野。#这个函数返回一个列表,[0]代表识别到的目标颜色区域左上顶点的x坐标,[1]代表#左上顶点y坐标,[2]代表目标区域的宽,[3]代表目标区域的高,[4]代表目标#区域像素点的个数,[5]代表目标区域的中心点x坐标,[6]代表目标区域中心点y坐标,#[7]代表目标颜色区域的旋转角度(是弧度值,浮点型,列表其他元素是整型),#[8]代表与此目标区域交叉的目标个数,[9]代表颜色的编号(它可以用来分辨这个#区域是用哪个颜色阈值threshold识别出来的)。if blobs:#如果找到了目标颜色for b in blobs:#迭代找到的目标颜色区域# Draw a rect around the blob.img.draw_rectangle(b[0:4]) # rect#用矩形标记出目标颜色区域img.draw_cross(b[5], b[6]) # cx, cy#在目标颜色区域的中心画十字形标记print(clock.fps()) # 注意: 你的OpenMV连到电脑后帧率大概为原来的一半#如果断开电脑,帧率会增加
二、find_blobs函数
追踪小球是OpenMV用的最多的功能了,在10分钟快速上手中
通过find_blobs函数可以找到色块.我们来讨论一下,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方法,来判断是什么颜色的色块。
red = (xxx,xxx,xxx,xxx,xxx,xxx)
blue = (xxx,xxx,xxx,xxx,xxx,xxx)
yellow = (xxx,xxx,xxx,xxx,xxx,xxx)
img=sensor.snapshot()
red_blobs = img.find_blobs([red])
color_blobs = img.find_blobs([red,blue, yellow])
Copy
roi是“感兴趣区”。在使用统计信息中已经介绍过了。
left_roi = [0,0,160,240]
blobs = img.find_blobs([red],roi=left_roi)
x_stride 就是查找的色块的x方向上最小宽度的像素,默认为2,如果你只想查找宽度10个像素以上的色块,那么就设置这个参数为10:
blobs = img.find_blobs([red],x_stride=10)
y_stride 就是查找的色块的y方向上最小宽度的像素,默认为1,如果你只想查找宽度5个像素以上的色块,那么就设置这个参数为5:
blobs = img.find_blobs([red],y_stride=5)
invert 反转阈值,把阈值以外的颜色作为阈值进行查找
area_threshold 面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉
pixels_threshold 像素个数阈值,如果色块像素数量小于这个值,会被过滤掉
merge 合并,如果设置为True,那么合并所有重叠的blob为一个。
注意:这会合并所有的blob,无论是什么颜色的。如果你想混淆多种颜色的blob,只需要分别调用不同颜色阈值的find_blobs。
all_blobs = img.find_blobs([red,blue,yellow],merge=True)
red_blobs = img.find_blobs([red],merge=True)
blue_blobs = img.find_blobs([blue],merge=True)
yellow_blobs = img.find_blobs([yellow],merge=True)
Copy
margin 边界,如果设置为1,那么两个blobs如果间距1一个像素点,也会被合并。
blobs是一个列表
find_blobs对象返回的是多个blob的列表。(注意区分blobs和blob,这只是一个名字,用来区分多个色块,和一个色块)。
列表类似与C语言的数组,一个blobs列表里包含很多blob对象,blobs对象就是色块,每个blobs对象包含一个色块的信息。
blobs = img.find_blobs([red])
Copy
blobs就是很多色块。
可以用for循环把所有的色块找一遍。
for blob in blobs:
print(blob.cx())
Copy
对于for循环的使用,见python背景知识
三、blob色块对象
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)。如果色块类似一个铅笔,那么这个值为0~180°。如果色块是一个圆,那么这个值是无用的。如果色块完全没有对称性,那么你会得到0~360°,也可以通过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()是圆的外接正方形的面积。
【OpenMv】颜色识别相关推荐
- ARDUINO + openmv 颜色 识别 工程训练大赛
停车 识别三种颜色 通过串口 发送给arduino 进行处理..利用的是色块的横坐标 大小比较 从而将三种颜色 排列组合 到达排序效果 针对工程训练大赛 openmv 颜色识别 共享此代码 欢迎学习 ...
- openmv识别二维码,颜色识别
最近在学习openmv,顺便写点东西,也算是自己积累一下,不多说直接上代码 二维码识别并返回值 import sensor, image, time, pyb import ujson from py ...
- OpenMV多颜色识别详解
需提前观看:OpenMV单颜色识别详解: 多颜色识别和单颜色识别差不多,只需要改动[thresholds[threshold_index]]这个地方 #更改之前 for blob in img.fin ...
- 基于openMV的颜色识别
基于openMV的颜色识别 openMV简介 OpenMV是一个可编程的摄像头,通过Python语言可实现你想要的逻辑.而且摄像头本身也内置了一些图像处理的算法,使用起来也更加的方便,仅需要写一些简单 ...
- OpenMV的单颜色识别讲解
OpenMV的官方教程:寻找色块:single_color_rgb565_blob_tracking示例讲解:视频讲解 需要提前看的文章:程序烧录:颜色阈值设置 目录 threshold_index和 ...
- OpenMV颜色阈值设置
OpenMV提供了两者阈值设置方案.分别是阈值编译器和直方图的方式选择阈值. 阈值编译器:优点,所寻找到的目标颜色更加合理,其他相似颜色区域的干扰比较小.缺点,调节LAB的最大最小值比较花费时间. 直 ...
- OpenMV4 H7 PLUS摄像头颜色识别
使用OpenMV4 H7 PLUS摄像头进行红绿蓝三颜色的识别: 参考: 官网:https://book.openmv.cc 函数库:https://docs.singtown.com/micropy ...
- python打开是什么颜色-python实现简单颜色识别程序
本文实例为大家分享了python实现简单颜色识别程序的具体代码,供大家参考,具体内容如下 import numpy as np import cv2 font= cv2.FONT_HERSHEY_SI ...
- python红色的颜色表达式_50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)...
目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...
最新文章
- SQL语句统计错误率
- Scrum Master如何让敏捷团队正常运转?
- Nginx配置中文域名
- opengl 深度详解_一步步学OpenGL(1) -《打开一个窗口》
- 自动ftp脚本的使用
- U3D 代码自动化生成定制预置体的旋转问题
- ITK:获取类型的基本信息
- Js基础知识梳理系列
- Taro+react开发(32) Please use the ‘new‘ operator, this DOM object constructor cannot be called as a fu
- C#中的static、readonly与const的比较
- mysql数据库查询源码_超简单php mysql数据库查询类
- 计算机应用的问答题,计算机应用技术问答题(一)
- 六招制敌,搞定 core dump 问题
- WebGIS设计思想
- Flask 的 template模板 与 jinja2语法
- 中南大学计算机基础考试试题,[中学]中南大学计算机基础考试题库试题.doc
- Android:这是一份全面 详细的Webview使用攻略
- 卷积码树状图怎么画_卷积码状态图怎么画 卷积编码器状态图画法
- macOS Mojave 夜神模拟器打不开解决办法
- H264系列(5):关于ITU-H264 和 ISO/IEC H264 的关系