赞
踩
openMV简介
OpenMV是一个可编程的摄像头,通过Python语言可实现你想要的逻辑。而且摄像头本身也内置了一些图像处理的算法,使用起来也更加的方便,仅需要写一些简单的Python代码,即可轻松的完成各种机器视觉相关的任务。在此,我们通过OpenMV实现了颜色识别。
颜色识别理论方法
首先研究分析OpenMV的颜色块识别与测距系统的实现,然后对摄像头识别到的物体颜色进行提取与分析。为了排除背景颜色与目标颜色相近程度、光照强度、颜色块与镜头的距离改变而引起的误差和错误分析,我们研究了OpenMV视觉模块的基本原理和Python语言的编写,接着对背景颜色与目标颜色的相近程度和颜色块与镜头距离改变时系统的误差做了比较与说明,最后完成了基于OpenMV的颜色块识别。
颜色识别测试结果
可进行单色识别,也可进行多色识别;颜色识别的关键在于阈值的选取,根据阈值即可来确定识别的颜色。以红色、黄色、绿色、蓝色为例,定义红色的阈值为(44, 75, 8, 77, -44, 21),绿色的阈值为(50, 60, -48, -30, 15, 38),蓝色的阈值为(61, 95, -23, -10, -30, -10),黄色的阈值为(36, 75, -20, 11, 23, 48),可以对它的code值进行输出,当摄像头识别到物体的颜色时,可自动对焦并输出它的code值,然后与它们的进制数进行比对,即可确定摄像头识别到的颜色。
***颜色识别代码(***附解析)
下面展示一些 内联代码片
。
# LOTS OF Blob Detection import sensor, image, time # 如果要保证颜色追踪效果的话, 需要对环境的严格控制 # 晚上光源的冷暖色等,都会对颜色追踪造成很大的影响 # 彩色图片颜色的阈值格式组成, 是由LAB颜色空间的各自最小值与最大值组成 # 点击右侧的颜色空间下拉选择按钮, 默认为RGB Color Space # 参考右侧的LAB Color Space里面的参数 # (minL, maxL, minA, maxA, minB, maxB) # 灰度图的阈值格式 # (min, max) # 红色阈值 pink_threshold =(44, 75, 8, 77, -44, 21) # 黄色阈值 yellow_threshold = (36, 75, -20, 11, 23, 48) # 蓝色阈值 blue_threshold = (61, 95, -23, -10, -30, -10) # 绿色阈值 green_threshold =(50, 60, -48, -30, 15, 38) # 颜色阈值的设定可以在 工具(Tools) -> 机器视觉(Machine Vision) -> 阈值编辑器(Threshold Editor) 中调试 # 颜色代码是find_blobs返回的blob对象中的一个成分, 用于标识,该色块是由在哪个阈值下选择的 # 颜色1: 红色的颜色代码 pink_color_code = 1 # code = 2^0 = 1 # 颜色2: 绿色的颜色代码 yellow_color_code = 2 # code = 2^1 = 2 # 颜色3蓝的代码 blue_color_code = 4# color_code_3 = 2^2 = 4 # 颜色4绿的代码 green_color_code = 8# color_code_4 = 2^3 = 8 sensor.reset() # 初始化摄像头 sensor.set_pixformat(sensor.RGB565) # 选择像素模式 RGB565. sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed. sensor.skip_frames(time = 2000) # Let new settings take affect. sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。 clock = time.clock() # Tracks FPS. while(True): clock.tick() # Track elapsed milliseconds between snapshots(). img = sensor.snapshot() # 拍照,返回图像 # 在图像中寻找满足颜色阈值约束(color_threshold, 数组格式), 像素阈值pixel_threshold, 色块面积大小阈值(area_threshold)的色块 blobs = img.find_blobs([pink_threshold, yellow_threshold , blue_threshold , green_threshold], area_threshold=100) if blobs: #如果找到了目标颜色 for blob in blobs: #迭代找到的目标颜色区域 x = blob[0] y = blob[1] # width = blob[2] # 色块矩形的宽度 height = blob[3] # 色块矩形的高度 center_x = blob[5] # 色块中心点x值 center_y = blob[6] # 色块中心点y值 color_code = blob[8] # 颜色代码 # 添加颜色说明 if color_code == pink_color_code: img.draw_string(x, y - 10, "red", color = (0xFF, 0x00, 0x00)) elif color_code == blue_color_code: img.draw_string(x, y - 10, "blue", color = (0xFF, 0x00, 0x00)) elif color_code == yellow_color_code: img.draw_string(x, y - 10, "yellow", color = (0xFF, 0x00, 0x00)) elif color_code == green_color_code: img.draw_string(x, y - 10, "green", color = (0xFF, 0x00, 0x00)) #用矩形标记出目标颜色区域 img.draw_rectangle([x, y, width, height]) #在目标颜色区域的中心画十字形标记 img.draw_cross(center_x, center_y) print(clock.fps())
运用openMV IDE连接openMV后,运行代码
运行结果图片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。