2023 电赛 E 题 K210 方案--K210实现矩形识别

相关库介绍

sensor(摄像头)

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(10)

reset():重置并初始化单目摄像头

set_pixformat():设置摄像头输出格式,可选的帧格式有GRAYSCALERGB565YUV422,需要根据自己的摄像头进行修改

set_framesize():设置摄像头输出帧大小,最大支持VGA格式,推荐设置为QVGA格式

skip_frames():跳过指定帧数或者跳过指定时间内的图像,主要作用为让摄像头识别的图像稳定下来,画面不抖动

代码介绍

识别的具体思路可以看2023 电赛 E 题 K210方案 第五章

矩形阈值设定

 图1 选择阈值编辑器

  图2 阈值调节框

通过调节LAB值来得到让图中矩形框为白或为黑。

得到LAB阈值:(73, 16, -67, 30, 55, -56)

  图3 阈值调节结果

注:在实际情况中,这个阈值需要进行调整,在不同环境因素下,即使在同一个地方,由于不同的距离和光线,都会影响阈值的最终结果。

建议:在进行阈值设定时,可以多考虑不同的情况下,不同的阈值情况,让代码选择在不同的情况下的不同阈值;或则收集到足够多的阈值,使用聚类方法将其得到一个中间值。

关键代码

    # 寻找轮廓contours = img.find_blobs(region_thresholds1[i], invert=False, area_threshold=100, pixels_threshold=10, merge=True)if contours:max_blob = find_min(contours)if max_blob:img.draw_rectangle(max_blob[0:4], color=(0,255,0))

find_blobs():查找图像中所有色块,并返回一个包括每个色块的色块对象的列表。

thresholds: 必须是元组列表. [(minL, minA, minB, maxL, maxA, maxB)],就是阈值

invert:反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。

即:在调节的阈值中需要的为黑色,通过反转后,就会检测白色部分,返回白色部分的色块。

area_threshold:若一个色块的边界框区域小于该值,则会被过滤掉。

pixels_threshold:若一个色块的像素数小于该值,则会被过滤掉。

merge :True,则合并所有没有被过滤掉的色块,这些色块的边界矩形互相交错重叠。

通过调用该方法就可以找到在画面中所需要的所有结果。

返回值:[{'x': 140, 'y': 88, 'w': 15, 'h': 7, 'pixels': 43, 'cx': 147, 'cy': 91}]
(x, y, w, h)表示色块的外框,pixels表示色块的像素大小,(cx, cy)表示色块的中心点。

def find_min(blobs):use_ = [20,20, 280,200]max_size = float("inf")min_blob = Nonefor blob in blobs:if blob[0] != 0 and blob[1] != 0:if is_rect_in_rect(use_, blob[0:4]) or abs(abs(blob[0] - blob[2]) - abs(blob[1] - blob[3])) < max_size:print(blob)min_blob = blobmin_size = abs(abs(blob[0] - blob[2]) - abs(blob[1] - blob[3]))return min_blob

find_min():该函数的作用时从得到的矩形框中选出我们需要的,剔除掉不合适的。

在这个函数里面我们限定识别到的矩形框应该在整个画面的中心位置,不能出现在画面的边界位置。

并且我们还去掉了一种特殊情况,就是当摄像头什么都没有识别到或识别画面为空(显示为黑色)时,就会把整个画面进行框起来,这种是一种特殊情况,在代码中通过判断矩形的起始坐标是否w为0,如果为0,就去掉该种情况。

出现的问题

1、当画面距离摄像头太远时,识别的效果会不佳。

2、在移动过程中,会出现识别不佳。

3、画面模糊。

4、代码频频报错,不知道什么原因。

解决的问题

1、可以等摄像头稳定时,看看它的识别效果怎样,尽量不要用手去移动,可以使用一个支架。

2、在移动过程中,可以考虑给摄像头加一个跳帧识别,或则选用一个高性能的摄像头。

3、这个可能时在初始化摄像头时没有设置对,或则摄像头已经损坏。

4、K210中使用的Python语言并不是一个完整的Python,简称MicroPython,与Python是有区别的,因此在编写代码中要额外注意,不能混淆两则。如果语法正确,那就可能是当前安装的固件中不支持当前代码的库,这样就需要去更新固件。

实现效果

 图4 识别效果1

 图5 识别效果2

下一章内容:对当前代码进行修改和完善,使其在远距离也能够进行识别。

 硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中小学分班查询系统如何制作?这个方法值得借鉴

暑假即将结束&#xff0c;新学年即将开始&#xff0c;学校面临着一个重要的任务&#xff0c;那就是学生的分班问题。这个问题涉及到新生入学的分班&#xff0c;以及低年级学生升入高年级时的分班。对于负责分班的老师们来说&#xff0c;这无疑增加了不少工作量和挑战。 在开学…

上榜 Gartner | 中国领先的实时数据管理厂商 DolphinDB

在 Gartner 近日发布的 Hype Cycle for Data, Analytics and AI in China, 2023 报告中&#xff0c;DolphinDB 位列实时数据管理代表厂商。这是自去年 DolphinDB 入选 Gartner《中国数据库管理系统供应商甄选》后&#xff0c;又一次凭借领先的产品能力获得国际权威第三方分析机…

P2P网络NAT穿透原理(打洞方案)

1.关于NAT NAT技术&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种把内部网络&#xff08;简称为内网&#xff09;私有IP地址转换为外部网络&#xff08;简称为外网&#xff09;公共IP地址的技术&#xff0c;它使得一定范围内的多台主机只…

python算法指南程序员经典,python算法教程pdf百度云

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;你也能看懂的python算法书 pdf&#xff0c;python算法教程这本书怎么样&#xff0c;现在让我们一起来看看吧&#xff01; 给大家带来的一篇关于算法相关的电子书资源&#xff0c;介绍了关于算法、详解、算法基础方面的内…

Kaggle狗图像分类实战

文章目录 Kaggle狗图像分类实战d2l安装问题python语法学习os.path.joind2l 数据加载streamlit Kaggle狗图像分类实战 d2l安装问题 d2l安装失败&#xff0c;报错如上图 去下面的网站下载到该项目文件目录下再pip install即可 Python d2l项目安装包(第三方库)下载详情页面 - …

ATFX汇评:英央行利率决议来袭,大概率加息25基点

ATFX汇评&#xff1a;今日19:00&#xff0c;英国央行公布利率决议、会议纪要和货币政策报告&#xff1b;半小时后&#xff0c;英国央行行长贝利召开货币政策新闻发布会。当前英国央行基准利率5%&#xff0c;市场预期将加息25基点至5.25%&#xff0c;假若符合预期&#xff0c;则…

【css】背景图片附着

属性&#xff1a;background-attachment 属性指定背景图像是应该滚动还是固定的&#xff08;不会随页面的其余部分一起滚动&#xff09;。 background-attachment: fixed&#xff1a;为固定&#xff1b; background-attachment: scroll为滚动 代码&#xff1a; <!DOCTYPE h…

opencv的Mask操作,选择图片中感兴趣的区域

最近做目标检测任务的时候&#xff0c;需要对固定区域的内容进行检测&#xff0c;要用到opencv的mask操作&#xff0c;选择图片固定的区域 代码 import cv2 import numpy as npimg cv2.imread(data/images/smoking.png)# 弹出一个框 让你选择ROI | x,y是左上角的坐标 x,y,w,…

23款奔驰C260 L更换内饰最全发光套件,提升车内氛围感

原厂1:1设计&#xff0c;免编程匹配&#xff0c;无损安装&#xff0c;可升级项目&#xff1a; 1、碳纤维中控氛围灯&#xff08;阿凡达水滴款&#xff09; 2、发光前风口&#xff1b; 3、发光后风口&#xff1b; 4、发光座椅背气氛灯&#xff1b; 5、中音发光盖板 6、主动…

数学分析:流形的线性代数回顾

因为是线性的&#xff0c;所以可以把所有的系数都提取出去。这也是多重线性代数的性质。可以看成基本的各项自变量的乘法。 这里可以看到两个不同基向量下&#xff0c;他们的坐标转化关系。 引出了张量积&#xff0c;也就是前面提到的内容。 对偶空间的例子总是比较美好。 因为…

使用express搭建后端服务

目录 1 创建工程目录2 初始化3 安装express依赖4 启动服务5 访问服务总结 上一篇我们利用TDesign搭建了前端服务&#xff0c;现在的开发讲究一个前后端分离&#xff0c;后端的话需要单独搭建服务。后端服务的技术栈还挺多&#xff0c;有java、php、python、nodejs等。在众多的技…

代理模式(Proxy)

代理模式是一种结构型设计模式&#xff0c;让开发者能够提供对象的替代品或其占位符。代理对象控制着对于原对象的访问&#xff0c;并允许在将请求提交给原对象前后进行一些处理。代理模式为原对象提供一种代理以控制对这个对象的访问&#xff0c;并由代理对象控制对原对象的引…

青蛙过河 [递推法]

青蛙过河 [递推法] 题目描述输入输出样例输入样例输出样例 递推解答A C 代码 题目描述 有一条河&#xff0c;左边一个石墩( A A A区)上有编号为 1 &#xff0c; 2 &#xff0c; 3 &#xff0c; 4 &#xff0c; … &#xff0c; n 1&#xff0c;2&#xff0c;3&#xff0c;4&am…

电脑更新win10黑屏解决方法

电脑更新win10黑屏解决方法 电脑黑屏出现原因解决步骤 彻底解决 电脑黑屏 出现原因 系统未更新成功就关机&#xff0c;导致系统出故障无法关机 解决步骤 首先长安电源键10s关机 按电源键开机&#xff0c;出现logo时按F8进入安全模式。 进入自动修复环境后&#xff0c;单击…

[nlp] TF-IDF算法介绍

&#xff08;1&#xff09;TF是词频(Term Frequency) 词频是文档中词出现的概率。 &#xff08;2&#xff09; IDF是逆向文件频率(Inverse Document Frequency) 包含词条的文档越少&#xff0c;IDF越大。

宋浩概率论笔记(二)随机变量

本章节内容较多&#xff0c;是概率论与数理统计中最为重要的章节&#xff0c;对于概率密度和分布函数的理解与计算要牢牢掌握&#xff0c;才能在后期的学习中更得心应手。

mybatis log插件

目前idea当中已经实施收费了 最近找了一个不收费的插件安装上重启一下就行了 点我下载提取码&#xff1a;sjc8

RocketMQ 事务消息

事务消息是 RocketMQ 的高级特性之一 。这篇文章&#xff0c;笔者会从应用场景、功能原理、实战例子三个模块慢慢为你揭开事务消息的神秘面纱。 1 应用场景 举一个电商场景的例子&#xff1a;用户购物车结算时&#xff0c;系统会创建支付订单。 用户支付成功后支付订单的状态…

【雕爷学编程】MicroPython动手做(29)——物联网之SIoT

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

阿里云AK创建

要在阿里云上创建 Access Key&#xff08;AK&#xff09;&#xff0c;您需要按照以下步骤进行操作&#xff1a; 登录到阿里云控制台&#xff08;[https://www.aliyun.com/?utm_contentse_1014243503)&#xff09;。 点击右上方的主账号&#xff0c;点击“AccessKey管理”。 …