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

这篇具有很好参考价值的文章主要介绍了OpenMV4 基于色块识别的图形+颜色+坐标识别代码(micropython)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

openmv4,视觉检测,python

# Untitled - By: zzy - 周五 11月 25 2022

import sensor, image, time
from pyb import UART
import json

output_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=0
    for blob in blobs:
        if blob.pixels() > max_size:
            max_blob=blob
            max_size = blob.pixels()
    return max_blob

def detect(max_blob):#输入的是寻找到色块中的最大色块
    #print(max_blob.solidity())
    shape=0
    if max_blob.solidity()>0.90 or max_blob.density()>0.84:
        img.draw_rectangle(max_blob.rect(),color=(255,255,255))
        shape=1

    elif max_blob.density()>0.6:
        img.draw_circle((max_blob.cx(), max_blob.cy(),int((max_blob.w()+max_blob.h())/4)))
        shape=2

    elif max_blob.density()>0.4:
        img.draw_rectangle(max_blob.rect(),color=(0,0,0))
        shape=3

    return shape

while(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) #方式1
        print('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) #方式1
        print('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) #方式1
        print('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) #方式1
        print('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) #方式1
        print('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())

再来看看程序的运行结果吧 ,在识别出多个图形,颜色及坐标之后,性能仍然不赖文章来源地址https://www.toymoban.com/news/detail-617655.html

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

到了这里,关于OpenMV4 基于色块识别的图形+颜色+坐标识别代码(micropython)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openmv4

    Flash小(128M)且寿命短,我们用16G的SD卡做文件系统 (1)每次烧程序先将SD卡格式化为FAT32 (2)连接,IDE重置openMV Cam (3)连接,将打开的脚本保存到openMV Cam(作为main.py) (4)弹出u盘 (5)上电自动运行 (6)因为我们是想用这个东西录视频,所以每次都用U盘查看数据 这玩意是

    2024年02月16日
    浏览(19)
  • openMV---多颜色识别

            识别出三种颜色,并输出坐标信息。 ·thresholds         thresholds为颜色的阈值,通过调用列表中的颜色阈值,来判断是什么颜色的色块。 ·roi         roi为“感兴趣区”,即在图像的那个方块进行识别。不设置则在整个图像中识别。          例:left

    2024年02月14日
    浏览(39)
  • openmv传承(二):色块检测

    这个色块检测真的没什么可以说的,非常简单烧一下例程,改一下阈值就可以使用 获取所需要修改的阈值  四、主要函数讲解 通过find_blobs函数可以找到色块。 thresholds是颜色的阈值,注意:这个参数是一个列表,可以包含多个颜色。如果你只需要一个颜色,那么在这个列表

    2024年02月13日
    浏览(44)
  • 【openmv学习笔记:1】色块查找

    星瞳科技openmv官方资料 嵌入式图像处理环境: 硬件平台:OpenMV4 Cam H7 Plus 语言:Micro python 软件:Openmv IDE 首先对摄像头进行一个初始化来显示图像。引入模块 sensor 。 我们可以在右上角看到摄像头拍摄到并传输回来的画面。 可以在Openmv涂上导热硅胶和装上散热塔进行散热,

    2024年02月13日
    浏览(29)
  • 【OpenMV+STM32】PID控制二维自由舵机色块追踪

    1、芯片:STM32F407ZGT6 2、CubeMX 3、KEIL5 4、OpenMV  5、舵机         利用由两个自由舵机组装而成的二维云台来控制OpenMV的位置,以实现追踪指定阈值色块的效果。 3.1 初始化配置 3.2 定时器配置(PWM波输出)         这里我使用TIM3的通道1和TIM4的通道1分别实现对两个舵机

    2024年03月19日
    浏览(39)
  • 用opencv识别颜色并输出坐标

    pip install opencv-python 参考https://blog.csdn.net/qq_42114833/article/details/128648458?spm=1001.2014.3001.5502 利用相机,并不保存照片

    2024年02月16日
    浏览(27)
  • 基于OpenCV的图像颜色与形状识别的原理2

    基于OpenCV的图像颜色与形状识别通常涉及以下几个步骤: 图像读取:使用OpenCV的cv2.imread()函数读取图像。 预处理:可能包括图像的灰度转换、二值化、滤波等,以减少噪声和无关信息。 颜色识别: 颜色空间转换:将图像从RGB颜色空间转换为HSV(色调、饱和度、值)或HSL(色

    2024年02月02日
    浏览(45)
  • opencv-python识别魔方特定颜色方块,并输出各方块中心坐标

    先叠个甲(作者寒假才开始自学opencv,做题练手,还不是很熟练,如果有不正确或者有更好的方法,欢迎在评论区指出) 题目 : 从网上寻找任一魔方图片,识别其中白色色块,描绘并输出其中所有白色色块的中心点坐标(也可选择其他颜色,代码有变化,后续指出) 首先我

    2024年02月10日
    浏览(58)
  • 【动画进阶】单标签下多色块随机文字随机颜色动画

    我的小册 《CSS 技术揭秘与实战通关》上线了,想了解更多有趣、进阶、系统化的 CSS 内容,可以猛击 - LINK。 在 CSS 还原拉斯维加斯球数字动画 - 掘金 一文中,我们利用纯 CSS,实现了一个非常 Amazing 的动画效果: 其中一个核心点就是,我们利用了如下的代码,在一个 DIV 平

    2024年02月07日
    浏览(28)
  • 【Java】使用Apache POI识别PPT中的图片和文字,以及对应的大小、坐标、颜色、字体等

    本文介绍如何使用Apache POI识别PPT中的图片和文字,获取图片的数据、大小、尺寸、坐标,以及获取文字的字体、大小、颜色、坐标。 官方文档:https://poi.apache.org/components/slideshow/xslf-cookbook.html 官方文档和网上的资料介绍的很少,很多元素,需要一点点尝试才能获取到。 注意

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包