OpenMV4 基于色块识别的图形+颜色+坐标识别代码(micropython)

2024-03-09 22:10

本文主要是介绍OpenMV4 基于色块识别的图形+颜色+坐标识别代码(micropython),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hello大家好,最近竞赛需要开始研究OpenMV4,今天和大家分享一段基于色块识别的图形+颜色+坐标识别代码,实测准确率高于90%哦,当然,需要在光线和距离都合适的情况下使用(假如你的识别结果不尽如人意,可以自行调节颜色阈值和目标与摄像头的距离),下面,话不多说,上代码!(需要搭配OpenMV IDE使用)

# Untitled - By: zzy - 周五 11月 25 2022import sensor, image, time
from pyb import UART
import jsonoutput_str_green="[0,0]"
output_str_red="[0,0]"
output_str_blue="[0,0]"
output_str_brown="[0,0]"
output_str_yellow="[0,0]"#green_threshold  = (   0,   80,  -70,   -10,   -0,   30)
green_threshold  = (   3,   39,  -29,   2,   1,   25)
red_threshold    = (   28,   40,  51,   65,   22,   50)
orange_threshold = (   23,   39,  19,   42,   13,   31)
blue_threshold  = (   50,   56,  -14,   1,   -31,   -13)
brown_threshold  = (   22,   30,  1,   17,   8,   25)
yellow_threshold  = (   53,   58,  -7,   3,   58,   63)sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((0,20,320,200))#QVGA find Region Of Interest
#sensor.set_windowing((5,10,160,95))#QQVGA find Region Of Interest
sensor.skip_frames(10)
sensor.set_auto_whitebal(False)
clock = time.clock()uart = UART(3, 115200)
def find_max(blobs):max_size=0for blob in blobs:if blob.pixels() > max_size:max_blob=blobmax_size = blob.pixels()return max_blobdef detect(max_blob):#输入的是寻找到色块中的最大色块#print(max_blob.solidity())shape=0if max_blob.solidity()>0.90 or max_blob.density()>0.84:img.draw_rectangle(max_blob.rect(),color=(255,255,255))shape=1elif max_blob.density()>0.6:img.draw_circle((max_blob.cx(), max_blob.cy(),int((max_blob.w()+max_blob.h())/4)))shape=2elif max_blob.density()>0.4:img.draw_rectangle(max_blob.rect(),color=(0,0,0))shape=3return shapewhile(True):#clock.tick()img = sensor.snapshot() # Take a picture and return the image.blobs_green = img.find_blobs([green_threshold])blobs_red = img.find_blobs([red_threshold])#blobs_orange = img.find_blobs([orange_threshold])blobs_blue = img.find_blobs([blue_threshold])blobs_brown = img.find_blobs([brown_threshold])blobs_yellow = img.find_blobs([yellow_threshold])if blobs_green:max_blob_green=find_max(blobs_green)shape_green=detect(max_blob_green)#img.draw_rectangle(max_blob_green.rect(),color=(0,255,0))#画框img.draw_cross(max_blob_green.cx(), max_blob_green.cy(),color=(0,255,0))#画十字准星output_str_green="[%d,%d,%d]" % (max_blob_green.cx(),max_blob_green.cy(),shape_green) #方式1print('green:',output_str_green)else:print('not found green!')if blobs_red:max_blob_red=find_max(blobs_red)shape_red=detect(max_blob_red)#img.draw_rectangle(max_blob_red.rect(),color=(255,0,0))img.draw_cross(max_blob_red.cx(), max_blob_red.cy(),color=(255,0,0))output_str_red="[%d,%d,%d]" % (max_blob_red.cx(),max_blob_red.cy(),shape_red) #方式1print('red:',output_str_red)else:print('not found red !')#if blobs_orange:#max_blob_orange=find_max(blobs_orange)#detect(max_blob_orange)##img.draw_rectangle(max_blob_orange.rect(),color=(255,128,0))#img.draw_cross(max_blob_orange.cx(), max_blob_orange.cy(),color=(255,128,0))#output_str_orange="[%d,%d]" % (max_blob_orange.cx(),max_blob_orange.cy()) #方式1#print('orange:',output_str_orange)#uart.write(output_str_orange+'\r\n')#else:#print('not found orange !')if blobs_blue:max_blob_blue=find_max(blobs_blue)shape_blue=detect(max_blob_blue)#img.draw_rectangle(max_blob_blue.rect(),color=(0,0,255))img.draw_cross(max_blob_blue.cx(), max_blob_blue.cy(),color=(0,0,255))output_str_blue="[%d,%d,%d]" % (max_blob_blue.cx(),max_blob_blue.cy(),shape_blue) #方式1print('blue:',output_str_blue)else:print('not found blue !')if blobs_brown:max_blob_brown=find_max(blobs_brown)shape_brown=detect(max_blob_brown)#img.draw_rectangle(max_blob_brown.rect(),color=(205,133,63))img.draw_cross(max_blob_brown.cx(), max_blob_brown.cy(),color=(205,133,63))output_str_brown="[%d,%d,%d]" % (max_blob_brown.cx(),max_blob_brown.cy(),shape_brown) #方式1print('brown:',output_str_brown)else:print('not found brown !')if blobs_yellow:max_blob_yellow=find_max(blobs_yellow)shape_yellow=detect(max_blob_yellow)#img.draw_rectangle(max_blob_yellow.rect(),color=(255,255,0))img.draw_cross(max_blob_yellow.cx(), max_blob_yellow.cy(),color=(255,255,0))output_str_yellow="[%d,%d,%d]" % (max_blob_yellow.cx(),max_blob_yellow.cy(),shape_yellow) #方式1print('yellow:',output_str_yellow)else:print('not found yellow !')uart.write(output_str_green + output_str_red + output_str_blue + output_str_brown + output_str_yellow + '\r\n')#print(clock.fps())

再来看看程序的运行结果吧 ,在识别出多个图形,颜色及坐标之后,性能仍然不赖

实测运行结果,在颜色阈值选择正确情况下识别率还是比较高的哦(三角形识别出之后画黑色矩形框,不是没识别出来哦)
解除部分注释之后可以查看帧数以调整性能,开发者还可以根据自己的需求增加被检测颜色与图形,再将其通过串口发送到目标单片机上哦,假如之后有时间,我再出一份解释代码含义的文章,嘻嘻,就看大家的需求和小编的时间啦。

这篇关于OpenMV4 基于色块识别的图形+颜色+坐标识别代码(micropython)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/792095

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=