当前位置:   article > 正文

openmv图像识别:宝藏多颜色图形同时识别_openmv识别物块并显示名字

openmv识别物块并显示名字

前言:

最近参加了光电赛,校赛运气不好碰到铁板被淘汰了,我是大一菜鸟,只负责宝藏识别部分,花了一个多月学python、研究openmv写出来的代码,虽然技术性不高,但也算一种学习和成长了。


      

目录

零、预备知识

一、要识别的图形

       1.1 识别要求

       1.2  观察图形

       1.3 识别标志

二、识别思路

        思路1.0

        思路2.0

        思路3.0

三、openmv向小车主控实时发送识别结果

1、openmv与STM32串口通信

        1.1 硬件连接

        1.2 openmv部分 

                1.2.1 前置部分

                1.2.2 串口配置 

                1.2.3识别部分

        1.3 STM32部分

                1.3.1 USART.c

                1.3.2 main.c

2、电平检测

        2.1 增加代码

        2.2 主程序 

四、按键切换红蓝队


零、预备知识

自己临时找的资料和网课

openmv官方文档:10分钟快速上手 · OpenMV中文入门教程icon-default.png?t=N7T8https://book.openmv.cc/quick-starter.htmlPython基础知识:Python导学视频_哔哩哔哩_bilibiliPython导学视频是黑马程序员python教程,8天python从入门到精通,学python看这套就够了的第1集视频,该合集共计164集,视频收藏或关注UP主,及时了解更多相关视频内容。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1qW4y1a7fU?p=1&vd_source=bacf9907e915b4bed671807a9c8859a1

一、要识别的图形

       1.1 识别要求

         己方真宝藏推倒,其他宝藏均不推倒。

       1.2  观察图形

        假设己方为蓝方,发现己方宝藏外层均为蓝色,真宝藏内层为黄色圆形,假宝藏内层为绿色三角形,敌方同理。

       1.3 识别标志

        若为真宝藏则对矩形画蓝框,若为假宝藏则画红框。


二、识别思路

        思路1.0

        1. 识别到矩形确认是宝藏;

        2. 在矩形区域内,识别蓝色确认是己方宝藏,若为红色则直接判定为假;

        3. 在矩形区域内,确认为己方宝藏条件下,识别到圆形确认为真宝藏,否则为假宝藏;

        失败原因:圆是徒手画的,识别效果不好;识别圆形需要加畸变矫正,可能阻碍了矩形的识别。

# 畸变矫正

img = sensor.snapshot().lens_corr(1.8)

        思路2.0

        1. 识别到矩形确认是宝藏;

        2. 在矩形区域内,识别蓝色确认是己方宝藏,若为红色则直接判定为假;

        3. 在矩形区域内,确认为己方宝藏条件下,识别到黄色色块确认为真宝藏,否则为假宝藏;

         失败原因:假宝藏非常容易被识别为真宝藏,敌方真宝藏也有一定概率被误识别为真宝藏,或者直接没有任何识别反应。可能原因一是因为openmv对绿色色块不敏感,但对黄色色块非常敏感;可能原因二是光线较暗的环境下颜色对比度低,无法识别颜色。

  1. while True:
  2. clock.tick()
  3. img = sensor.snapshot()
  4. for r in img.find_rects(threshold=10000):
  5. area = r.rect() # 检测到矩形
  6. blobs_blue = img.find_blobs(blue_threshold, roi = area)
  7. if blobs_blue:
  8. # 在矩形内检测到蓝色,说明是己方宝藏
  9. blobs_yellow = img.find_blobs(yellow_threshold, roi = area)
  10. # 在矩形框内检测黄色色块
  11. if blobs_yellow:
  12. img.draw_rectangle(r.rect(), color = (0, 0, 255))
  13. # 在检测到的真宝藏上画蓝框
  14. print("真宝藏")
  15. else:
  16. # 没识别到黄色色块,说明是假宝藏
  17. print("假宝藏")
  18. else:
  19. # 没检测到蓝色, 说明是敌方宝藏
  20. print("敌方宝藏")

       

         图里的代码是很早的版本,看看效果就行,我后面的效果图因为比赛寄了,全删完了回收站都找不到QAQ

        思路3.0

        1. 识别到矩形确认是宝藏;

        2. 在矩形区域内,识别蓝色确认是己方宝藏,若为红色则直接判定为假;

        3. 在矩形区域内,确认为己方宝藏条件下,识别到黄色色块确认为真宝藏;

        4. 为尽量避免假宝藏的误识别,我将假宝藏的判定条件改为:在矩形区域内,确认为己方宝藏条件下,识别到绿色色块且绿色色块的density在0.40到0.60之间(三角形判定)。

        5. 同时,将敌方宝藏的判定条件改为在矩形内检测红色色块。

  1. while True:
  2. clock.tick()
  3. img = sensor.snapshot()
  4. for r in img.find_rects(threshold=10000):
  5. area = r.rect() # 检测到矩形
  6. blobs_blue = img.find_blobs(blue_threshold, roi = area)
  7. if blobs_blue:
  8. # 在矩形内检测到蓝色,说明是己方宝藏
  9. blobs_yellow = img.find_blobs(yellow_threshold, roi = area)
  10. # 在矩形框内内检测黄色色块
  11. if blobs_yellow:
  12. img.draw_rectangle(r.rect(), color = (0, 0, 255))
  13. # 在检测到的真宝藏上画蓝框
  14. print("真宝藏")
  15. else:
  16. for blob_green in img.find_blobs(green_threshold, roi = area):
  17. if blob_green and blob_green.density() > 0.40 and blob_green.density() < 0
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号