IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【手拉手 带你准备电赛】单色块识别(基于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())

最终结果

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

?

疑惑细解:

关于阈值的设置:

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

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

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

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

关于自动增益和白平衡

????????自动增益

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

????????白平衡

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

????????好的,关于色块识别我们就分析到这里,你学废了吗?下篇文章见!

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:43:23  更:2022-04-18 17:47:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:27:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码