测试测试 测试

**非常详细的视频和文字教程,讲解常见的openmv教程包括 巡线、物体识别、圆环识别、阈值自动获取等。非常适合学习openmv、K210、K230等项目
视频合集链接在

openmv教程合集 openmv入门到项目开发 openmv和STM32通信 openmv和opencv区别 openmv巡线 openmv数字识别教程LCD


专刊openmv视觉文章链接: https://blog.csdn.net/qq_46187594/category_12900902.html

2-匹配多个模板的

上面我们演示了如何实现匹配一个模板的,下面演示如何实现匹配多个模板的

首先把直接处理的文件都放进去pgm 按照一定的命名都放到openmv识别成的U盘里面
在这里插入图片描述
然后下面是我们的0-9数字识别功能代码

# 多模板匹配系统 - 数字识别增强版
# 核心功能:
# 1. 支持0-9数字模板实时匹配
# 2. 可视化识别结果及性能指标
# 3. 结构化数据输出import time
import sensor
import image
from image import SEARCH_EX  # 导入穷举搜索模式# ******************** 摄像头初始化配置 ********************
sensor.reset()                      # 复位摄像头硬件
sensor.set_contrast(1)             # 设置对比度(范围0-3)
sensor.set_gainceiling(16)         # 设置最大增益值(防止过曝光)
sensor.set_framesize(sensor.QQVGA)  # 设置图像分辨率160x120
sensor.set_pixformat(sensor.GRAYSCALE)  # 使用灰度图像模式(提升处理速度)
sensor.set_vflip(True)             # 垂直翻转图像(根据摄像头物理安装方向调整)
sensor.set_hmirror(True)           # 水平镜像图像(根据实际需要调整)# ******************** 用户可配置参数 ********************
TEMPLATE_PATHS = [                 # 模板文件路径列表"/0.pgm", "/1.pgm", "/2.pgm",  # 模板文件应存放在OpenMV存储根目录"/3.pgm", "/4.pgm", "/5.pgm",  # 建议使用32x32像素灰度图像"/6.pgm", "/7.pgm", "/8.pgm", "/9.pgm"
]
MATCH_THRESHOLD = 0.70            # 匹配相似度阈值(0.0-1.0,值越大匹配越严格)
SEARCH_STEP = 4                   # 搜索步长(增大可提升速度但降低精度)
TEXT_COLOR = 255                  # 显示文本颜色(灰度模式下255=白色)
TEXT_OFFSET = 5                   # 文本与识别框的垂直间距(像素)# ******************** 模板预加载系统 ********************
class TemplateLoader:"""模板加载管理器,实现:1. 启动时预加载所有模板到内存2. 自动从文件路径提取模板名称3. 提供错误加载提示功能"""def __init__(self):self.templates = []       # 模板存储列表self.load_templates()     # 初始化时自动加载模板def load_templates(self):"""加载并验证所有模板文件"""for path in TEMPLATE_PATHS:try:# 从文件路径提取模板名称(示例:"/9.pgm" -> "9"# split("/")[-1]获取文件名,split(".")[0]去除扩展名name = path.split("/")[-1].split(".")[0]# 构建模板字典对象template = {"image": image.Image(path),  # 加载模板图像到内存"name": name,               # 存储简化名称"path": path                # 保留完整路径用于调试}self.templates.append(template)print(f"预加载成功:{path} -> {name}")except Exception as e:# 捕获文件不存在或格式错误等异常print(f"加载失败:{path} ({str(e)})")# 实例化模板加载器(程序启动时自动执行加载)
template_loader = TemplateLoader()# 初始化性能计数器(用于计算帧率)
clock = time.clock()# ******************** 主处理循环 ********************
while(True):clock.tick()  # 开始帧计时# 图像采集处理流程img = sensor.snapshot()  # 捕获一帧图像# 多模板匹配流程for template in template_loader.templates:# 执行模板匹配操作# find_template参数说明:# template - 预加载的模板图像对象# threshold - 相似度阈值# step - 搜索步长(影响速度和精度)# search - 搜索模式(SEARCH_EX为全搜索)result = img.find_template(template["image"], MATCH_THRESHOLD,step=SEARCH_STEP,search=SEARCH_EX)if result:  # 当匹配结果有效时# 解包匹配区域坐标(x,y)和尺寸(width,height)x, y, w, h = result# 可视化处理部分# 绘制红色矩形框标记识别区域(颜色值255在灰度模式显示为白色)img.draw_rectangle(result, color=TEXT_COLOR)# 计算文本显示位置(防止超出图像上边界)text_y = y - TEXT_OFFSET if y > TEXT_OFFSET else 0# 在识别框上方显示模板名称# 参数说明:# x - 文本左上角X坐标(对齐识别框左侧)# text_y - 垂直位置(识别框上方5像素)# template["name"] - 显示的文本内容# color - 文本颜色# scale - 字体缩放比例# mono_space - 启用等宽字体显示img.draw_string(x, text_y, template["name"],color=TEXT_COLOR, scale=1, mono_space=True)# 数据输出部分# 输出格式:[时间戳] 识别到 模板名称 坐标: (中心X, 中心Y)print("[{:.0f}] 识别到 {} 坐标: ({},{})".format(time.ticks_ms(),          # 获取系统毫秒时间戳template["name"],         # 模板名称x + w//2,                 # 计算区域中心X坐标y + h//2                  # 计算区域中心Y坐标))# 实时性能显示fps = clock.fps()  # 计算实际帧率# 在画面左上角显示帧率信息(避免遮挡识别结果)# 参数5,5表示距离左上角5像素的起始位置img.draw_string(5, 5, "FPS:%.1f" % fps, color=TEXT_COLOR)

识别到会输出在
在这里插入图片描述
注意:如果觉得经常误识别,可以调整识别的匹配阈值

MATCH_THRESHOLD = 0.70            # 匹配相似度阈值(0.0-1.0,值越大匹配越严格)

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

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

相关文章

CSS rem、vw/vh、less

目录 分辨率、视口与二倍图 一、分辨率与像素基础 1. 物理像素(Physical Pixels) 2. 逻辑像素(CSS 像素) 二、视口(Viewport)控制 1. 视口类型 2. 设置理想视口 三、二倍图(Retina/HiD…

【数电】半导体存储电路

组合逻辑电路输入和输出之间是确定关系,与之前的历史记录没有任何关系。时序逻辑电路则有相应的存储元件,要把之前的状态保存起来。 要构成时序逻辑电路,必须要有相应的存储元件,第五章讲述相应的存储元件 一、半导体存储电路概…

OPPO手机如何实时翻译会议视频?视频翻译轻松应对多语言场景

在全球化日益深入的今天,跨语言沟通已成为职场和生活中的常见需求。无论是参加国际会议、观看外语视频,还是与海外客户交流,语言障碍都可能成为效率的绊脚石。幸运的是,OPPO手机凭借其强大的功能和智能化设计,为用户提…

28_跨域

目录 promise promise的基本语法 async await try catch promise 静态方法 跨域 跨域的解决方案 1-cors ​编辑 2-jsonp方案 3-代理服务器 promise promise 是一个es6新增的语法 承诺的意思 作用:是专门用来解决回调地狱!!!! promise的基本语法 // 基本语法:// Pr…

LeetCode Hot100 刷题笔记(4)—— 二叉树、图论

目录 一、二叉树 1. 二叉树的深度遍历(DFS:前序、中序、后序遍历) 2. 二叉树的最大深度 3. 翻转二叉树 4. 对称二叉树 5. 二叉树的直径 6. 二叉树的层序遍历 7. 将有序数组转换为二叉搜索树 8. 验证二叉搜索树 9. 二叉搜索树中第 K 小的元素 …

【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x00 免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用;任何个人/组织须在合法合规…

BurpSuit抓包失败-基础配置

问题描述:当开启拦截抓包的时候,burpsuite没有反应,好不容易经过一通配置,浏览器出现无法访问的情况。 解决办法: 下载浏览器插件 首先下载一个代理转换插件:Omega,这样比较方便,…

求解AX=XB 方法

一、简介 一文浅谈旋转变换:旋转矩阵、旋转向量、欧拉角、四元数-CSDN博客 在机器人学、计算机视觉和几何学中,经常会遇到求解矩阵方程 AXXB 的问题。这种方程通常出现在坐标系变换、手眼标定(Hand-Eye Calibration)等场景中。理…

AnimateCC基础教学:随机抽取获奖名单及奖品-V1.0原型版

舞台界面设计: 主轴第一帧代码: this.btnObj.addEventListener("click", updateStage.bind(this)); createjs.Ticker.addEventListener("tick", updateRandom.bind(this)) var _this this; var bPlaying false; var nameList ["张三…

深入了解Linux内核:task_struct结构详解

Linux 操作系统的广袤世界里,进程管理宛如一座大厦的基石,支撑着整个系统的稳定运行与高效运转 。而task_struct结构体,无疑是进程管理这座大厦的核心支柱,它承载着进程的关键信息,贯穿于进程从诞生到消亡的整个生命周…

IsaacLab最新2025教程(7)-引入IK solver控制机器人

机器人控制可以直接给定关节角进行驱动实现功能,完成任务,但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候,用eef pose会更符合直觉一些,isaacsim用的是LulaKinematics,因为IsaacLab现在是ETHZ的团队在…

Vue——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs

文章目录 一、概念理解二、指令1. 常用内置指令总结2. 常用指令修饰符3. 自定义指令4. v-model原理表单类组件封装 三、补充1. computed计算属性2. watch监视器3. ref和$refs 一、概念理解 【事件处理函数】 事件处理函数应该写到一个跟data同级的配置项(methods&a…

求职笔试题

PDD 最长公共子序列 1143-最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:"""二维动态规划"""m, n len(text1), len(text2)# dp [[0]* (n1)] * (m1) 这种写法错误,m1行…

【Ragflow】6. Ragflow-plus重磅更新:增加用户后台管理系统

概述 Ragflow本身并不包含用户管理的功能,我在系列前文中,写过一个脚本,用来批量插入用户,并自动加入团队,配置默认模型设置。然而,此方式需要用户安装对应环境,对普通用户并不友好。 因此我开…

什么是贴源库

贴源库的定义与核心概念 贴源库(Operational Data Store, ODS)是数据架构中的基础层,通常作为数据仓库或数据中台的第一层,负责从业务系统直接抽取、存储原始数据,并保持与源系统的高度一致性。其核心在于“贴近源头”…

MSTP+VRRP三层架构综合实验

一、实验目的 掌握VLAN、VRRP、STP和Eth-Trunk的基本配置方法。 实现内网与外网的通信,并确保网络的高可用性和冗余性。 理解DHCP、OSPF和NAT在网络中的应用。 二、实验环境 网络拓扑:如图所示,包含两台三层交换机(SW1、SW2&a…

未来村庄智慧灯杆:点亮乡村智慧生活​

在乡村振兴与数字乡村建设的时代进程中,未来村庄智慧灯杆凭借其多功能集成与智能化特性,已成为乡村基础设施建设领域的崭新焦点,为乡村生活带来了前所未有的便利,推动着乡村生活模式的深刻变革。​ 多功能集成:一杆多能…

RedHatLinux(2025.3.22)

1、创建/www目录,在/www目录下新建name和https目录,在name和https目录下分别创建一个index.htm1文件,name下面的index.html 文件中包含当前主机的主机名,https目录下的index.htm1文件中包含当前主机的ip地址。 (1&…

第十五章:Python的Pandas库详解及常见用法

在数据分析领域,Python的Pandas库是一个不可或缺的工具。它提供了高效的数据结构和数据分析工具,使得数据处理变得简单而直观。本文将详细介绍Pandas库的基本功能、常见用法,并通过示例代码演示如何使用Pandas进行数据处理。最后,…

算法为舟 思想为楫:AI时代,创作何为?

在科技浪潮汹涌澎湃的当下,AI技术以前所未有的态势席卷各个领域,创作领域亦未能幸免。当生成式AI展现出在剧本撰写、诗歌创作、图像设计等方面的惊人能力时,人类创作者仿佛置身于文明演化的十字路口,迷茫与困惑交织,兴奋与担忧并存。在AI时代,创作究竟该何去何从?这不仅…