当前位置:   article > 正文

一种基于openmv多坐标组合发送的方法_openmv坐标位置信息发送

openmv坐标位置信息发送

提示:本程序测试主控为open mv4 H7,开发平台为openmv IDE

一种基于openmv多坐标组合发送的方法


前言

一种基于openmv多坐标组合发送的方法,如果一种或多种颜色有多个坐标,要一次性发送或者组合这些目标,可以使用如下方案解决,该博文提供一种最简单的处理方案


一、方案

如下是完整代码,后面会有详细说明

在这里插入图片描述

    for blob3 in img.find_blobs(thresholds4,roi=left_roi,pixels_threshold=30, area_threshold=30,merge = 0):
        if blob3:  #a1,a2,string,string1,string2
            if not(blob3.cx() < 79 and blob3.cy() > 150):
                if (blob3.cx() >(log2x+temp-xiu) or blob3.cx()<(log2x-temp+xiu)) or (blob3.cy() >(log2y+temp-xiu) or blob3.cy()<(log2y-temp+xiu)):
                     if(blob3.cx() >(log1x+temp) or blob3.cx()<(log1x-temp)) or (blob3.cy() >(log1y+temp) or blob3.cy()<(log1y-temp)):
                        a1+=1
                        img.draw_edges(blob3.min_corners(), color=(255,0,0))
                        img.draw_cross(blob3.cx(), blob3.cy(), color=(255,0,0))
                        output_str="(%3d%3d)" % (blob3[5],blob3[6]) #方式1
                        #print("(%3d%3d)" % (blob3[5],blob3[6]))
                        #log1x=blob3[5]
                        #log1y=blob3[6]
                        a2 = string
                        string =str(a2)+str(blob3[5])+','+str(blob3[6])+','
    if a1!= 0:
        string1 = list(string) #先转换成列表
        string1.pop()   #删除列表的最后一位
        string2 =''.join(string1)  #再重新转换成字符串
        print(string2)
        a1=0
        string=''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

首先我们通过img.find_blobs函数找到我们想要追踪的颜色,if blobs如果找到这种颜色的目标则执行,在if中进行继续判断

    for blob3 in img.find_blobs(thresholds4,roi=left_roi,pixels_threshold=30, area_threshold=30,merge = 0):
        if blob3:  #a1,a2,string,string1,string2
  • 1
  • 2

在这里插入图片描述

然后在定义一个变量作为计数,这里定义a1计数,意思是每找到一个目标则计数一次,这样可以统计目标物体的个数,img.draw_xxx基本的标记操作,blob3[5],blob3[6]是我们需要的中心点位置坐标,output_str这里没有用上,主要为串口调试用

                        a1+=1
                        img.draw_edges(blob3.min_corners(), color=(255,0,0))
                        img.draw_cross(blob3.cx(), blob3.cy(), color=(255,0,0))
                        output_str="(%3d%3d)" % (blob3[5],blob3[6]) #方式1
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

在定义前再定义一个string的空字符串,赋值给a2,通过互相赋值的方式使string拼接所有的坐标,注意将其转换成str型,中间用,隔开,这样就形成了以,号隔开的多坐标字符串,但此时还要对最后一位做处理

在这里插入图片描述

                        a2 = string
                        string =str(a2)+str(blob3[5])+','+str(blob3[6])+','
  • 1
  • 2

这里进行判断,if a1非0,表示有坐标传递,如果没有坐标,前方的a1就不会增加,只有有数据的时候才会发送,这里要注意到一点,因为之前加了逗号,在数据结尾的最后一位也会出现一个,号,所以这里我们使用列表转换的方法处理。首先用list转成列表,然后用pop去除最后一位,然后ioin再次转换成字符串,这样输出的string2就是最后的效果,输出完成后记得再把a1和string清0和清空
在这里插入图片描述

    if a1!= 0:
        string1 = list(string) #先转换成列表
        string1.pop()   #删除列表的最后一位
        string2 =''.join(string1)  #再重新转换成字符串
        print(string2)
        a1=0
        string=''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、效果演示

如下图所示,可以传送多个目标的集合坐标,如果有需要,可以在帧头和帧尾添加相应的标志位区分不同数据

在这里插入图片描述

在这里插入图片描述

总结

相关其它文档链接,欢迎查看,比赛准备用,如有不当之处,还望包涵指正

openmv一些常见问题与心得总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/474152
推荐阅读
相关标签
  

闽ICP备14008679号