物品分拣项目记录(一)
—OPENMV识别色块返回坐标
声明一下我是处于学习阶段的小白一枚,第一次写博客作为学习记录,加深印象,可能写的不对,或者写的不全,欢迎在下评论哈,我会及时更正
正文
OPENMV代码:
import sensor, image, time, math, json
from pyb import UART
from pyb import LED
uart = UART(1, 115200, timeout_char=1000)#串口1 115200 超时时间1s
#存放所要识别的颜色
croci = [(22, 100, 15, 127, -67, 127)]# 桔黄
back = [(32, 100, -128, 127, -128, 127)]#黑色
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA) #320240 Dpi
sensor.skip_frames(time = 2000) #跳过几帧 初始化
sensor.set_auto_gain(True) #打开自动增益
sensor.set_auto_whitebal(True) #打开白平衡
clock = time.clock()
while(True):
data1=[] #用于存放坐标
data2=[]
clock.tick()
img = sensor.snapshot().lens_corr(strength = 2.3, zoom = 1.0) #拍照+畸形矫正(加了超广角镜头)
#画蓝色线条把敏感区框起来
img.draw_line(27,50,252,50,(0,0,255),thickness = 2);
img.draw_line(27,50,27,240,(0,0,255),thickness = 2);
img.draw_line(252,50,252,105,(0,0,255),thickness = 2);
img.draw_line(252,105,305,105,(0,0,255),thickness = 2);
img.draw_line(305,105,305,240,(0,0,255),thickness = 2);
blobs = img.find_blobs(croci,
roi=[27,50,302,232], #敏感区域
pixels_threshold=40, #所要识别色块的像素大小范围
area_threshold=60,
merge=False,
merge_cb=False)
if blobs:
for a in blobs:
img.draw_cross(a.cx(), a.cy())
data1.append(str("X")) #打包数据
data1.append(str(a.cx()))
data1.append(str("Y"))
data1.append(str(a.cy()))
data1.append(str("A"))
blobs = img.find_blobs(back,
roi=[27,50,280,232],
invert=True,
pixels_threshold=40,
area_threshold=60,
merge=False,
merge_cb=False)
if blobs:
for b in blobs:
if(b.pixels()<=2000):
img.draw_cross(b.cx(), b.cy())
data2.append(str("X"))
data2.append(str(b.cx()))
data2.append(str("Y"))
data2.append(str(b.cy()))
data2.append(str("B"))
string = ''.join(data1) + ''.join(data2)
if len(string):
uart.write(string) #串口发送打包好的数据
print(string)
识别效果图片:
实物图片: