【OPENMV】openmv与单片机进行URAT通讯 发送坐标 2021-7-21

任务目标:使用openmv检测红色小球 ,找到小球在ROI中的坐标值,通过URAT通讯将 小球的二维平面坐标值发送给STM32单片机。

首先是寻找红色小球的色块

while(True):
    clock.tick()
    img = sensor.snapshot()
    for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):

利用img.find_blobs函数 

image.find_blobs(thresholds[, invert=False[, roi[, x_stride=2[, y_stride=1[, area_threshold=10[, pixels_threshold=10[, merge=False[, margin=0[, threshold_cb=None[, merge_cb=None]]]]]]]]]])

thresholds 是检测对象的颜色阈值

invert 是反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。

roi 是感兴趣区域的矩形元组(x,y,w,h)。如果未指定,ROI即整个图像的图像矩形。 操作范围仅限于 roi 区域内的像素。

x_stride 是查找某色块时需要跳过的x像素的数量。找到色块后,直线填充算法将精确像素。 若已知色块较大,可增加 x_stride 来提高查找色块的速度。

y_stride 是查找某色块时需要跳过的y像素的数量。找到色块后,直线填充算法将精确像素。 若已知色块较大,可增加 y_stride 来提高查找色块的速度。

若一个色块的边界框区域小于 area_threshold ,则会被过滤掉。

若一个色块的像素数小于 pixel_threshold ,则会被过滤掉。

merge 若为True,则合并所有没有被过滤掉的色块,这些色块的边界矩形互相交错重叠。 margin 可在相交测试中用来增大或减小色块边界矩形的大小。例如:边缘为1、相互间边界矩形为1的色块将被合并。

URAT

uart = UART(3, 115200)

uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位、
    if blob: #如果找到了目标颜色
        uart.write("X,Y\r")#一帧数据的帧头
        for b in blob:
        #迭代找到的目标颜色区域
            img.draw_rectangle(b[0:4]) # rect
            img.draw_cross(b[5], b[6]) # cx, cy
            x = b.cx()
            y = b.cy()
            output_str="[%d,%d]" % (x,y) #方式1
            #output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2
            print('you send:',output_str)

            uart.write(output_str+'\r\n')

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值