openmv识别三角形及一些不规则形状的识别

本文介绍了作者在国电赛中使用OpenMV进行图像处理,特别是三角形和其他不规则形状的识别。通过遍历像素点并分析像素分布,实现了对形状的分辨。文章还探讨了颜色识别、形状识别的思路,并提供了代码示例,指出这种方法也可应用于五边形、六边形等。最后,作者分享了在比赛中遇到的实际问题和解决方案。
摘要由CSDN通过智能技术生成

       今年在准备国电赛过程中,看了一下一些自己往年写过的代码,想起自己以前在网上找资料的艰辛,同时也非常感谢前人的无私分享,就想着把自己做过的东西也在网上分享分享,这篇文章应该去年就发的,但由于当时学业繁忙,后来就忘了,最近准备国赛才想起来。

        我个人对于颜色识别、形状识别、特征物品识别的一些个人理解,如果不对欢迎广大网友指正,欢迎交流^。^

        对于图像处理,我认为都是基于像素点的处理,一幅图像中,当我们得到像素点后,可以对这些点进行数学计算处理,然后就可以得到目标要求,所以我认为在学习使用中在使用集成度高的函数时,同时也应该从底层了解学习,对别人写的一些封装函数思考学习,这样在我们使用时,当遇到没有好的别人写好的函数可以使用时,可以自己尝试写符合自己要求的代码。

        下面进入正题,去年我国赛省赛做的题目是非接触物体尺寸形态测量(G 题),一开始我们组使用的是基于STM32OV5640,使用的代码都是涉及到每一个像素点的使用,代码编写十分繁琐,后来转去使用openmv,因为集成度高,同时使用python编写,十分简洁。

         题目要求中有一个要求是识别三角形,当时网上提供的代码思路大多数都是使用直线识别,然后根据多条直线角度计算识别,在使用过后发现识别的准确率不高,缺少有效的识别函数,于是根据以前使用OV5640识别颜色时的算法经验,自己就琢磨了一个,此思路不仅可以识别三角形,还可拓展于其他不规则模型形状,大概思路如下:

当然着仅仅只是提供一种思路,不一定是最好的,大家可以借鉴讨论,共同进步。

核心是使用下面这个函数:

Pixel_value = img.get_pixel(j,i )#获取图像中当前点的像素值

注:像素值为RGB888格式或RGB565,根据自己的前面程序设定而变化

        所以,我们可以通过对目标区域进行遍历,获取每一个点的像素值并进行判断,然后根据像素值的分布规律,对其进行形状分辨,正三角形是一个从上到下面积逐渐增大的形状,在目标区域内从第一行开始,进行符合要求的像素点查找,把第一行的像素点数记录下来,然后进行第二行像素点查找,也把第二行像素点数纪录下来,依次重复,直到最后一行,进行完这些后就可以使用这些像素点进行后续处理,对于三角形来说它是按从上到下的像素点增加,将其像素点数绘制于图,可以发现对应于曲线上的就是斜率的均匀变化,不会出现较大的斜率跳变,同时使用像素点分布位置进行辅助判别,这样可以大大提高正确率。

比如我们想识别绿色的三角形
                for i in range(SANY,SANYH):   #对每一行遍历
                    row=0   #记录下当前行数
                    for j in range(SANX,SANXW): #对当前行每一个点进行处理
                        green= img.get_pixel(j,i )  #获取像素值

                        if green[0] <45:   #RGB阈值判断
                            if green[1] < 100:
                                if green[2] <80:

        理解了这些后,还可以使用这种原理方法还可以实现五边形,六边形等形状的识别,所需要改变的仅仅只是改变对像素点的处理方法。

        对于这次的比赛要求,我发现其实可以在我上述方法上做一些改变,由于比赛要求中仅要求对圆形、三角形、正方形进行判别,所以我对我电赛的openmv程序做了些改变,由于对于颜色识别会得到一个矩形框的长宽,所以我们先进行颜色识别,然后在得到的这个矩形框内读取目标像素点数,然后得到目标像素点与目标框总像素点之比,如果这个比例大于0.75,我们就判定它是一个正方形,如果这个比例小于0.75,我们就判定它为一个三角形,如图。例如:墙上挂着一块绿色三角形,我首先进行绿色颜色识别(openmv官方提供颜色识别例程,其基本原理也与我上面说的相似),然后我们就可以得到一个矩形框包住这个三角形,我们可以计算的这个矩形框的像素面积为100,但在这个矩形框内包含着三角形和三角形旁边的空白部分,目标三角形的像素点数为50,目标颜色占比为0.5,所以程序把它认定为三角形。这其实是一个投机的方法*_*,不过比赛的目地不就是针对于不同目标要求实现不同设计以达到最好实现,总体基本原理还是不变的。

        后话:比赛中有关于摄像头的题目看起来好做,看上去有思路,其实做过的人都了解,这种题其实非常容易受到各种环境因素的影响,稳

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值