【手拉手 带你准备电赛】单色块识别(基于openmv)

这篇具有很好参考价值的文章主要介绍了【手拉手 带你准备电赛】单色块识别(基于openmv)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

文章背景

openmv介绍

openmv色块识别原理

openmv色块识别代码

最终结果

疑惑细解:

关于阈值的设置:

关于自动增益和白平衡


文章背景

        我们都听说过什么图像识别、色块识别,并且在2021年电赛——智能送药小车中也使用到了相关技术,那么你知道相关的原理和实现方法吗?接下来小蛋糕带你一探究竟。

openmv介绍

        首先我要为大家介绍一下,本篇文章的硬件平台——openmv。openmv并不仅仅是一个摄像头,它搭载了STM32的系列芯片,并且封装好了大量可供用户直接调用的函数,这些函数已经可以满足我们对于图像处理的大部分需求。在openmv的操作中,我们使用python调用相关函数进行编程。

openmv色块识别原理

        openmv实现色块的识别使用过一个非常容易理解的原理实现的——数值比较。这个原理是这样的:首先我们设置色彩的范围阈值(在这个数值范围内都被视为是这个颜色),然后我们捕获每一帧图片之后,把图片中的像素色彩数值与我们之前设置好的色彩阈值进行对比,在阈值的范围内则被视为是这个颜色,然后确定好色块之后,我们使用线框将色块框出,这样就完成了色块识别的工作。

openmv色块识别代码

        小蛋糕可是老代码人了,话不多说,我们在代码中给大家带来进一步的解析。

        1.首先设置色彩阈值(这要根据我们要识别的色彩具体设置,设置方式一是看界面右侧LAB色彩空间色彩信息的最小值和最大值;二是使用工具菜单栏中的--机器视觉--阈值编辑器,获得我们要识别色彩的阈值数据)。

#threshold_index = 0    #用于多色块识别(说明识别出来的色块编号信息)     
thresholds = [(57, 100, -128, 15, -42, -13)]

        2.然后我们进行相关函数的调用。在这步中,我们要初始化摄像头,设置摄像头格式和分辨率,同时确定留给摄像头进行准备工作的时间。

sensor.reset()  #初始化摄像头
sensor.set_pixformat(sensor.RGB565)    #设置摄像头格式
sensor.set_framesize(sensor.QVGA)      #设置像素格式
sensor.skip_frames(time = 2000)        #减少捕获到无效信息,所以我们跳过一段时间再进行后续的工作

        3.然后我们关闭白平衡和自动增益(开启这两个功能容易增大我们识别过程中的误差)。

sensor.set_auto_gain(False)    #关闭自动增益
sensor.set_auto_whitebal(False)     #关闭白平衡

        4.然后我们设置处理器时间。

clock = time.clock()

        5.接下来便到了我们程序中最重要的部分——识别色块,并将色块框出。贼这部分中我们首先需要将图片捕获,然后在每一帧捕获的图片上进行操作;然后我们在使用find.blobs函数找到色块,然后我们将寻找到的色块框出。

        img = sensor.snapshot()    #捕获图片
#使用遍历的方式进行色块的寻找
        for blob in img.find_blobs([thresholds[0]], pixels_threshold=200, area_threshold=200, merge=True):

        if blob.elongation() > 0.5:
            #下面三行代码分别是使用不同的颜色画出方框、中心十字、和横线,这三行代码可有可无不做要求
            img.draw_edges(blob.min_corners(), color=(255,0,0))
            img.draw_line(blob.major_axis_line(), color=(0,255,0))
            img.draw_line(blob.minor_axis_line(), color=(0,0,255))
       
        #下面的代码是稳定的,也就是不需要我们再次进行参数的设置
        img.draw_rectangle(blob.rect())    #画出矩形框
        img.draw_cross(blob.cx(), blob.cy())    #画中心位置的十字
       
        img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)

        6.最后我们将帧率打印出来即可(其实这里不打印也没有问题,这里主要是便于进行观察数据)

print(clock.fps())

最终结果

        通过上述代码我们就可以实现色块识别,识别结果如下图所示:

openmv识别颜色块原理,OPENMV,python,计算机视觉

疑惑细解:

关于阈值的设置:

        在此之前我们接触的阈值大多是以点的形式(即只是一个孤立的数值,而不是一个范围),那么我们在这里为什么将阈值设置包括最大值与最小值组成了一个范围呢?

        对于这种设置方式我们有两个角度的考量:

        1.首先,这是由色彩自身的特点决定的,在RGB,每种色彩对应了一段的数据。

        2.其次,这是为了减少在图片捕获过程中,光线等影响了物体色彩的显示,以减小误差。

关于自动增益和白平衡

        自动增益

        摄像机输出的视频信号必须达到电视传输规定的标准电平,即为了能在不同的景物照度条件下都能输出的标准视频信号,必须使放大器的增益能够在较大的范围内进行调节。这种增益调节通常都是通过检测视频信号的平均电平而自动完成的,实现此功能的电路称为自动增益控制电路,简称AGC电路。具有AGC功能的摄像机,在低照度时的灵敏度会有所提高,但此时的噪点也会比较明显。这是由于信号和噪声被同时放大的缘故。

        白平衡

        它指的是在图像处理的过程中, 对原本材质为白色的物体的图像进行色彩还原, 去除外部光源色温的影响, 使其在照片上也显示白色。

        好的,关于色块识别我们就分析到这里,你学废了吗?下篇文章见!文章来源地址https://www.toymoban.com/news/detail-668537.html

到了这里,关于【手拉手 带你准备电赛】单色块识别(基于openmv)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 电赛专题---一.概述【电赛简介 /信号类需要准备什么?/怎么才能打好电赛?】

    全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest)是教育部和工业和信息化部共同发起的大学生学科竞赛之一,是面向大学生的群众性科技活动,目的在于推动高等学校促进信息与电子类学科课程体系和课程内容的改革。竞赛的特点是与高等学校相关专业的课

    2024年02月16日
    浏览(28)
  • 电赛仪器仪表题的赛前准备(软件)

    比赛时候每个赛题有多个任务,按点得分。因此在不同任务的时候,我们需要通过单片机控制硬件切换不同的电路。最简单的切换方式就是设立一个任务标志变量task_num,然后主程序为一个while(1)死循环,里面通过多个while判断进行任务几。每次按下按键后task_num加一切换到下

    2024年02月16日
    浏览(24)
  • 【OpenAI】Python:基于 Gym-CarRacing 的自动驾驶项目(1) | 前置知识介绍 | 项目环境准备 | 手把手带你一步步实现

     猛戳!跟哥们一起玩蛇啊  👉 《一起玩蛇》🐍  💭 写在前面:  本篇是关于自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。 本专栏提供完整可运行代码,包括环境安装的详细讲解,将通过 \\\"理论+实践

    2024年02月03日
    浏览(37)
  • 【Python】OpenAI:基于 Gym-CarRacing 的自动驾驶项目(1) | 前置知识介绍 | 项目环境准备 | 手把手带你一步步实现

     猛戳!跟哥们一起玩蛇啊  👉 《一起玩蛇》🐍  💭 写在前面:  本篇是关于自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。 本专栏提供完整可运行代码,包括环境安装的详细讲解,将通过 \\\"理论+实践

    2024年02月02日
    浏览(41)
  • 2021电赛F题数字识别和巡线部分

    文章之前12月发了一次,但是我后来申请的免毕设后,用到了一些文字,所以删了这篇文章,但是还是查重了,于是我把一些程序讲解先删了,等毕设结束后再编辑加上。 这次电赛我没有准备多少东西,只提前准备了图像识别和坐标计算一类的。在20年的省赛帮过雪地调过k

    2024年02月07日
    浏览(41)
  • 基于Quartus Prime平台FPGA关于VGA显示的模块化设计:VGA八种单色屏1s切换显示、横条纹、竖条纹、棋盘格显示、显示模式按键可调、数码管显示单色屏序号

    VGA(Video Graphics Array)是一种显示接口标准,它最初由IBM于1987年推出。VGA协议定义了计算机视频输出信号的格式和特性。它主要用于连接计算机和显示器之间的传输,实现图像和视频的显示。 VGA协议支持最高分辨率为640x480像素,色彩深度为16位色(即65,536种颜色)。它使用模

    2024年02月03日
    浏览(36)
  • 2023 电赛 E 题 K210 方案--K210实现矩形识别

    reset():重置并初始化单目摄像头 set_pixformat():设置摄像头输出格式,可选的帧格式有 GRAYSCALE ,  RGB565 ,  YUV422,需要根据自己的摄像头进行修改 set_framesize(): 设置摄像头输出帧大小,最大支持VGA格式,推荐设置为QVGA格式 skip_frames():跳过指定帧数或者跳过指定时间内的图像

    2024年02月14日
    浏览(26)
  • 电赛智能送药小车_OpenMV巡线&识别十字路口完整代码

      整体思路 :通过划分ROI区域分区进行识别,中央 ROI 区域为巡线,左右两侧的 ROI_L 和 ROI_R 为十字路口识别 . 主程序如下 : # 本文代码中所导入的pid.py就是OpenMV官网上例程的代码 需要完整源码请私信我。

    2024年02月12日
    浏览(27)
  • 21年电赛F 题jetson nano+32F4识别数字(附源码和数据集)

    目录 前言 一、Opencv采集数字图像 二、标记图像数字位置 三、yolov4-tiny机器学习训练 四、jetson nano识别数字 五、识别效果 单个数字识别  ​​​ 两个数字识别  四个数字识别 命令行结果显示 小车OLED屏幕显示 总结+数据集权重文件+小车程序 前言 啊!四天三夜的电赛终于结

    2024年02月14日
    浏览(24)
  • 语音识别课前准备-kaldi安装流程

       进行语音识别学习课前的准备是Kaldi的安装,但是没想到在这个过程中,自己遇到了各种各样棘手问题。在经过数次的尝试后,自己终于成功了。于是写下这篇文章供大家解决安装中出现的各种问题。   在安装Ubuntu这里,我必须要提一句, 因为Kaldi解压后至少有26G ,

    2024年02月14日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包