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

编程入门 行业动态 更新时间:2024-10-28 13:29:00

openmv识别三<a href=https://www.elefans.com/category/jswz/34/1769024.html style=角形及一些不规则形状的识别"/>

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

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

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

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

        下面进入正题,去年我国赛省赛做的题目是非接触物体尺寸形态测量(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,所以程序把它认定为三角形。这其实是一个投机的方法*_*,不过比赛的目地不就是针对于不同目标要求实现不同设计以达到最好实现,总体基本原理还是不变的。

       

更多推荐

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

本文发布于:2024-03-05 15:27:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712675.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:角形   不规则   形状   openmv

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!