一、颜色识别

# 色块监测 例子
#
# 这个例子展示了如何通过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】颜色识别相关推荐

  1. ARDUINO + openmv 颜色 识别 工程训练大赛

    停车 识别三种颜色 通过串口 发送给arduino 进行处理..利用的是色块的横坐标 大小比较 从而将三种颜色 排列组合 到达排序效果 针对工程训练大赛 openmv 颜色识别 共享此代码 欢迎学习 ...

  2. openmv识别二维码,颜色识别

    最近在学习openmv,顺便写点东西,也算是自己积累一下,不多说直接上代码 二维码识别并返回值 import sensor, image, time, pyb import ujson from py ...

  3. OpenMV多颜色识别详解

    需提前观看:OpenMV单颜色识别详解: 多颜色识别和单颜色识别差不多,只需要改动[thresholds[threshold_index]]这个地方 #更改之前 for blob in img.fin ...

  4. 基于openMV的颜色识别

    基于openMV的颜色识别 openMV简介 OpenMV是一个可编程的摄像头,通过Python语言可实现你想要的逻辑.而且摄像头本身也内置了一些图像处理的算法,使用起来也更加的方便,仅需要写一些简单 ...

  5. OpenMV的单颜色识别讲解

    OpenMV的官方教程:寻找色块:single_color_rgb565_blob_tracking示例讲解:视频讲解 需要提前看的文章:程序烧录:颜色阈值设置 目录 threshold_index和 ...

  6. OpenMV颜色阈值设置

    OpenMV提供了两者阈值设置方案.分别是阈值编译器和直方图的方式选择阈值. 阈值编译器:优点,所寻找到的目标颜色更加合理,其他相似颜色区域的干扰比较小.缺点,调节LAB的最大最小值比较花费时间. 直 ...

  7. OpenMV4 H7 PLUS摄像头颜色识别

    使用OpenMV4 H7 PLUS摄像头进行红绿蓝三颜色的识别: 参考: 官网:https://book.openmv.cc 函数库:https://docs.singtown.com/micropy ...

  8. python打开是什么颜色-python实现简单颜色识别程序

    本文实例为大家分享了python实现简单颜色识别程序的具体代码,供大家参考,具体内容如下 import numpy as np import cv2 font= cv2.FONT_HERSHEY_SI ...

  9. python红色的颜色表达式_50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)...

    目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...

最新文章

  1. SQL语句统计错误率
  2. Scrum Master如何让敏捷团队正常运转?
  3. Nginx配置中文域名
  4. opengl 深度详解_一步步学OpenGL(1) -《打开一个窗口》
  5. 自动ftp脚本的使用
  6. U3D 代码自动化生成定制预置体的旋转问题
  7. ITK:获取类型的基本信息
  8. Js基础知识梳理系列
  9. Taro+react开发(32) Please use the ‘new‘ operator, this DOM object constructor cannot be called as a fu
  10. C#中的static、readonly与const的比较
  11. mysql数据库查询源码_超简单php mysql数据库查询类
  12. 计算机应用的问答题,计算机应用技术问答题(一)
  13. 六招制敌,搞定 core dump 问题
  14. WebGIS设计思想
  15. Flask 的 template模板 与 jinja2语法
  16. 中南大学计算机基础考试试题,[中学]中南大学计算机基础考试题库试题.doc
  17. Android:这是一份全面 详细的Webview使用攻略
  18. 卷积码树状图怎么画_卷积码状态图怎么画 卷积编码器状态图画法
  19. macOS Mojave 夜神模拟器打不开解决办法
  20. H264系列(5):关于ITU-H264 和 ISO/IEC H264 的关系

热门文章

  1. 【Go】高效截取字符串
  2. Mysql创建子账号以及权限设置
  3. Android 矢量图详解
  4. 浅谈 js运行机制 、宏观任务、微观任务
  5. 用 css before 多个词语加逗号,顿号等
  6. 经典英文电影台词~有必要都背下来,英语会很强悍~
  7. Windows 2008 R2 SP1 CVE-2017-0143-0148处理方法
  8. 东星医疗通过注册:上半年营收2亿 苏州济峰与平安基金是股东
  9. WZOI-254买铅笔
  10. Android GridView实现横向滚动