查看“MicroMV 颜色识别”的源代码
←
MicroMV 颜色识别
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 1、快速上手<br /> == 在IDE中写入以下代码<br /> <source lang="cpp"> import sensor, image # 设定目标颜色的LAB阈值 (L Min, L Max, A Min, A Max, B Min, B Max) threshold = (0, 0, 0, 0, 0, 0) sensor.reset()# 初始化摄像头 sensor.set_pixformat(sensor.RGB565)# 选择像素模式 RGB565 sensor.set_framesize(sensor.QVGA) #设定帧率 sensor.skip_frames(time=1000) #等待摄像头输出稳定 sensor.set_auto_gain(False) #关闭自动增益 sensor.set_auto_whitebal(False) #关闭白平衡。 while(True): img = sensor.snapshot()# 拍照,返回图像 # 在图像中寻找满足:颜色阈值threshold, 像素阈值pixel_threshold, 面积阈值area_threshold的色块 blobs = img.find_blobs([threshold], pixels_threshold=100, area_threshold=100) if blobs: #如果找到了目标颜色 for blob in blobs : #使用矩形框和十字遍历标示出目标颜色 img.draw_rectangle(blob.rect()) img.draw_cross(blob.cx(), blob.cy()) </source> 将openMV连接到电脑,在线运行程序,并将色彩格式调换为“LAB Color”。<br/> [[File:MicroMV的lab切换.png||300px|left]]<br style="clear: left"/> 使用鼠标在监视窗口拖选出目标颜色区域,记录下方LAB统计区中每一项的最小值和最大值<br/> [[File:选取lab.png||300px|left]]<br style="clear: left"/> 将之前记录的LAB每一项的最小值和最大值,填入threshold内 [[File:Lab写入.png||500px|left]]<br style="clear: left"/> 重新运行程序,就可以识别出目标颜色了 [[File:寻找色块成功.png||500px|left]]<br style="clear: left"/> == 2、知识延伸 == ===== 认识Lab 颜色空间 ===== Lab颜色空间是由CIE(国际照明委员会)制定的一种色彩模式。自然界中任何一点色都可以在Lab空间中表达出来,它的色彩空间比RGB空间还要大。另外,这种模式是以数字化方式来描述人的视觉感应,与设备无关,所以它弥补了RGB和 CMYK模式必须依赖于设备色彩特性的不足。由于Lab的色彩空间要比RGB模式和CMYK模式的色彩空间大。这就意味着RGB以及CMYK所能描述的色彩信息在Lab空间中都能得以映射。Lab空间取坐标Lab,其中L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表兰色。 ===== find_blobs函数: ===== <source lang="cpp"> 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) </source> • thresholds是颜色lab阈值的列表,可以包含多个颜色。如果你只需要一个颜色,那么在这个列表中只需要有一个颜色值,如果你想要多个颜色阈值,那这个列表就需要多个颜色阈值。<br /> • roi是“感兴趣区”,roi的格式是(x, y, w, h)的元组<br /> :x:区域左上角的x坐标 :y:区域左上角的y坐标 :w:区域的宽度 :h:区域的高度 • x_stride 就是查找的色块的x方向上最小宽度的像素,默认为2,如果你只想查找宽度10个像素以上的色块,那么就设置这个参数为10。<br /> • y_stride 就是查找的色块的y方向上最小宽度的像素,默认为1,如果你只想查找宽度5个像素以上的色块,那么就设置这个参数为5。<br /> • invert 反转阈值,把阈值以外的颜色作为阈值进行查找<br /> • area_threshold 面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉<br /> • pixels_threshold 像素个数阈值,如果色块像素数量小于这个值,会被过滤掉<br /> • merge 合并,如果设置为True,那么合并所有重叠的blob为一个。 注意:这会合并所有的blob,无论是什么颜色的。如果你想混淆多种颜色的blob,只需要分别调用不同颜色阈值的find_blobs。<br /> • margin 边界,如果设置为1,那么两个blobs如果间距1一个像素点,也会被合并。<br /> • threshold_cb未编辑<br /> • merge_cb未编辑<br /> ===== blob色块对象: ===== • blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h),可以直接在image.draw_rectangle中使用。<br /> • blob.x() 返回色块的外框的x坐标(int),也可以通过blob[0]来获取。<br /> • blob.y() 返回色块的外框的y坐标(int),也可以通过blob[1]来获取。<br /> • blob.w() 返回色块的外框的宽度w(int),也可以通过blob[2]来获取。<br /> • blob.h() 返回色块的外框的高度h(int),也可以通过blob[3]来获取。<br /> • blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。<br /> • blob.cx() 返回色块的外框的中心x坐标(int),也可以通过blob[5]来获取。<br /> • blob.cy() 返回色块的外框的中心y坐标(int),也可以通过blob[6]来获取。<br /> • blob.rotation() 返回色块的旋转角度(单位为弧度)(float)。如果色块类似一个铅笔,那么这个值为0~180°。如果色块是一个圆,那么这个值是无用的。如果色块完全没有对称性,那么你会得到0~360°,也可以通过blob[7]来获取。<br /> • blob.code() 返回一个16bit数字,每一个bit会对应每一个阈值。举个例子:<br /> <source lang="cpp"> blobs = img.find_blobs([red, blue, yellow], merge=True) </source> :如果这个色块是红色,那么它的code就是0001,如果是蓝色,那么它的code就是0010。注意:一个blob可能是合并的,如果是红色和蓝色的blob,那么这个blob就是0011。这个功能可以用于查找颜色代码。也可以通过blob[8]来获取。<br /> • blob.count() 如果merge=True,那么就会有多个blob被合并到一个blob,这个函数返回的就是这个的数量。如果merge=False,那么返回值总是1。也可以通过blob[9]来获取。<br /> • blob.area() 返回色块的外框的面积。应该等于(w * h)<br /> • blob.density() 返回色块的密度。这等于色块的像素数除以外框的区域。如果密度较低,那么说明目标锁定的不是很好。 比如,识别一个红色的圆,返回的blob.pixels()是目标圆的像素点数,blob.area()是圆的外接正方形的面积。 [[MicroMV 简介|返回MicroMV目录页面]]
返回至
MicroMV 颜色识别
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息