openmv 学习笔记(24电赛笔记)

模版匹配

        模版匹配是一种计算机视觉技术,用于图像或者视频中查找特定的模版或者对象,查找模版可以是数字或者是物体,技术通过在目标图像中寻找与模版图像相似的区域来实现匹配。这种技术最早起源在 20世纪70年代 的图像处理领域。

        使用模版匹配通常需要提供,参考模版openmv自动进行匹配,匹配成功,就能识别。

归一化互相关 (Normalized Cross-Correlation, NCC)

        NCC 是一种有效的匹配度量方法,通过计算模板图像和目标图像区域的相关性来确定相似度。NCC 可以减轻光照变化和对比度变化的影响,使匹配结果更好。

        openmv使用的算法是NCC,这里有一个雷,这种匹配算法,对于相同匹配对象,大小跟角度要相似,与参考图片不同大小不同角度,不能识别。这种情况建议是,多生成几张不同角度,不同远近的相同对象的 .pgm 识别图片,作为参考。

使用模版匹配识别数字

插入SD卡

        openmv的自带flash很小,只有111kB使用模版匹配数字,需要再U盘中保存,识别图片,这里图片要注意是  .pgm格式,自带flash很小保存不了几张图片,所以需要插入SD卡,openmv最大支持32G的内存卡。

保存参考图片

        雷点,这里用来识别的图片一定要小,不然就会Region of interest is smaller than template!也就是提示,roi区域比模版图片小。

        使用openmv开发IDE工具保存需要识别的图片,运行  helloworld.py文件。

        上面运行之后,摄像头对准要识别的物体,不要动,关闭IDE中的连接按钮,这个时候会有张图片保存在IDE中的显示图像区域,这个时候左键截取出需要识别的图片,右键保存在openmvU盘中。

转换图片格式

        这个时候将识别图片放到U盘之后,但是IDE保存图片的格式是bmp文件格式,这种图片格式不是需要的,需要的是pgm格式,借用下面网站将图片进行格式转换。

BMP轉PGM轉換器。在线自由 — Convertio

调用程序

        保存了识别图片之后,这里在历程IDE中调用,模版匹配示例程序。

        这里需要将,代码中识别图片路径改一下,改成自己的pgm图片路径。

        路径的话,是对U盘的相对路径,改一下就好了。

        改完之后,运行程序识别需要识别的物体,这里注意图片在摄像头中的大小和角度要与模版相似,看看识别效果。

注意事项

        openmv在进行模版匹配的时候,模版图像的大小对性能和准确性有很大的影响,模版图像不应该超过图像分辨率的 1/4。

        应该范围在 20*20到40*40之间,这种尺寸可以保证一定精度的同时,不会对计算机资源产生过大的压力。同时模版图像应该,包含明显特征方便在视频中进行有效匹配。在官方提供的历程里面,模版图像的大小要求限制在,32*32 pixel。

查看图像像素

        这里在U盘里面,打开图像左上角可以看到图片的像素

        在规定像素之内,然后就将bmp格式转换为pgm格式就可以了。

如何截取规定像素图片

sensor.set_windowing(0,0,32,32)

        这里调用函数将IDE中window显示窗口,大小设置为32*32在窗口中截取,需要图片,像素规格也就只能是32*32。这样也就不用怕像素超标了。

运行模版匹配识别效果

        前面有讲过,只有在图像中大小匹配,才能识别,这里还有一点只有在roi感兴趣区域,才能识别下面也会讲,调用识别的函数。

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        很鸡肋很鸡肋,有点拿远了识别不了,拿近了也不行,角度不对也不行,还得再roi区域内。

相关调用识别函数

image.find_template(template, threshold, [roi, step, search])

        这个是openmv提供用来模版匹配的函数,在图像中搜索与给定模版匹配区域,返回最佳匹配的位置,和得分。

函数参数讲解

template参数模版图像,通常是一个较小的灰度图像,包含希望在图像中要找的对象

threshold参数, 类型为 float类型,参数取值范围在 0~1 之间,取值越大要求图像与模版匹配度越高,就越难识别,越小匹配度越低,就容易造成识别错误,通常取值在0.7~0.8之间。      

roi参数,类型为元组默认取值为 roi = (10,0,60,60),用来设置感兴趣区域,识别图像不在感兴趣区域则不进行模版匹配 。格式为roi = (x ,y ,w ,h)

step参数,类型为int 步长参数,步长越大匹配速度越快,同时精度下降,默认为1,如果没有进行填写

search参数,模版匹配搜索类型,这个参数有两种类型 SEARCH_EX SEARCH_DX 前者是穷举搜索,适用于小图像高精度的搜索,后者是菱形搜索,适合大图像和低精度的搜索要求。识

识别数字代码

# Template Matching Example - Normalized Cross Correlation (NCC)
#
# This example shows off how to use the NCC feature of your OpenMV Cam to match
# image patches to parts of an image... expect for extremely controlled enviorments
# NCC is not all to useful.
#
# WARNING: NCC supports needs to be reworked! As of right now this feature needs
# a lot of work to be made into somethin useful. This script will reamin to show
# that the functionality exists, but, in its current state is inadequate.import time, sensor, image
from image import SEARCH_EX, SEARCH_DS# Reset sensor
sensor.reset()# Set sensor settings
sensor.set_contrast(1)
sensor.set_gainceiling(16)
# Max resolution for template matching with SEARCH_EX is QQVGA
sensor.set_framesize(sensor.QQVGA)
# You can set windowing to reduce the search image.
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)# Load template.
# Template should be a small (eg. 32x32 pixels) grayscale image.
template = image.Image("/32.pgm")clock = time.clock()# Run template matching
while (True):clock.tick()img = sensor.snapshot()roi = (0,0,sensor.width(),sensor.height())# find_template(template, threshold, [roi, step, search])# ROI: The region of interest tuple (x, y, w, h).# Step: The loop step used (y+=step, x+=step) use a bigger step to make it faster.# Search is either image.SEARCH_EX for exhaustive search or image.SEARCH_DS for diamond search## Note1: ROI has to be smaller than the image and bigger than the template.# Note2: In diamond search, step and ROI are both ignored.r = img.find_template(template, 1.0, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))if r:img.draw_rectangle(r)print(clock.fps())

                欢迎指正,希望对你,有所帮助!!!

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

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

相关文章

网络编程总复习

TCP的创建: 服务器端 : 客户端:

【计算机网络】IP分片实验

一:实验目的 1:理解IP数据报分片的工作原理。 2:理解IP协议报文类型和格式。 二:实验仪器设备及软件 硬件:RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件:记事本、WireShark、Chrom…

倒计时11天,生物发酵行业盛宴即将在沪召开!

随着生物科技领域的蓬勃发展,2024上海生物发酵展的召开已经进入倒计时阶段,距离这场生物发酵产业的年度盛事仅剩11天。作为行业内备受瞩目的展会,它不仅汇聚了全球顶尖的生物发酵技术、产品与服务,更是一个探讨行业趋势、促进合作…

c++语言学习注意事项

当学习C语言时,有几个重要的注意事项可以帮助初学者更有效地掌握这门强大的编程语言: 1. 理解基本概念和语法 C 是一门复杂且功能强大的编程语言,因此理解其基本概念和语法至关重要。初学者应该重点掌握以下几个方面: 基本语法和…

最小二乘法公式推导

微积分和线性代数碰撞的数学盛宴:最小二乘法公式推导!_哔哩哔哩_bilibili 递归最小二乘法与参数辨识_哔哩哔哩_bilibili 笔记

护眼灯有没有护眼的效果?一文揭秘用护眼灯到底好不好

护眼灯有没有护眼的效果?在现在这个时代,无论是在学习还是办公,都很难离开一款好用的台灯,所以,为了避免会挑选到质量不好的台灯,我们应该要先避开一些网红小品牌,优先选择有专业技术支持的&…

数据库作业四

1. 修改 student 表中年龄( sage )字段属性,数据类型由 int 改变为 smallint : ALTER TABLE student MODIFY Sage SMALLINT; 2. 为 Course 表中 Cno 课程号字段设置索引,并查看索引: ALTER TABLE…

JS+H5在线文心AI聊天(第三方接口)

源码在最后面 调用的不是文心官方接口 可以正常聊天 有打字动画 效果图 源代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

科技与占星的融合:AI 智能占星师

本文由 ChatMoney团队出品 在科技的前沿领域&#xff0c;诞生了一位独特的存在——AI占星师。它并非传统意义上的占星师&#xff0c;而是融合了先进的人工智能技术与神秘的占星学知识。 这能够凭借其强大的数据分析能力和精准的算法&#xff0c;对星辰的排列和宇宙的能量进行深…

VLC输出NDI媒体流

目录 1. 下载安装VLC Play 2. 首先在电脑上安装NDI Tools 3. 运行VLC进行输出配置 4. 播放视频 5. 验证 (1)用Studio Monitor验证 (2)用OBS验证 NDI(Network Device Interface)即网络设备接口,是由美国 NewTek 公司开发的免费标准,它可使兼容的视频产品以高质量…

爬虫 APP 逆向 ---> 粉笔考研

环境&#xff1a; 粉笔考研 v6.3.15&#xff1a;https://www.wandoujia.com/apps/1220941/history_v6031500雷电9 模拟器&#xff1a;https://www.ldmnq.com/安装 magisk&#xff1a;https://blog.csdn.net/Ruaki/article/details/135580772安装 Dia 插件 (作用&#xff1a;禁…

RT-Thread debug 卡死在Stm32_putc问题分析解决

问题和解决方法 找了块开发板玩RT-Thread&#xff0c;一顿骚操作之后&#xff0c;发现debug就卡死在Stm32_putc(不稳定&#xff0c;反复重新上下电&#xff0c;重来有时候卡死有时候不卡死)&#xff0c;卡死情况如下图&#xff1a; 先最后的解决方法&#xff1a;取消调默认的内…

Qt学习--对象树的概念

文章目录 QPushButton 按钮Qt中对象树的概念封装自定义控件 QPushButton 按钮 学习对象树之前&#xff0c;我们得先学习基本控件的创建。创建一个按钮 创建一个按钮&#xff1a;第一种方法 // 创建一个按钮QPushButton *btn new QPushButton;// 设置控件的父对象btn->setP…

文本解码原理--MindNLP

前言 根据前文预测下一个单词 一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积 Greedy search 在每个时间步&#x1d461;都简单地选择概率最高的词作为当前输出词: &#x1d464;&#x1d461;&#x1d44e;&#x1d45f;&#x1d454;&#x1d45a;&am…

CSS 基础知识

CSS(级联样式表)是设置 Web 内容样式的代码。CSS 基础知识将介绍入门所需的内容。我们将回答以下问题:如何将文本设置为红色?如何使内容显示在(网页)布局中的某个位置?如何用背景图片和颜色装饰我的网页? 什么是CSS? 像HTML一样,CSS不是一种编程语言。它也不是一种标…

前端了解到框架-网络复习

前端 HTML 超文本标记语言 画页面 各种各样的标签组成页面进行展示 桌面创建文本修改后缀即可 <!DOCTYPE html>: 声明文档类型和HTML版本。<html>: 根标签&#xff0c;所有其他标签都包含在内。<head>: 包含了文档的元数据&#xff0c;如字符编码、网页标…

58 高级IO

本章重点 理解五种io模型的基本概念&#xff0c;重点是io的多路转接 掌握select模型&#xff0c;实现select版本的tcp服务器 掌握poll模型&#xff0c;实现poll版本的tcp服务器 掌握epoll模型&#xff0c;实现epoll版本的tcp服务器 理解epoll的LT模型和ET模式 理解select和epo…

关于数据存储位置的一点知识

关于数据存储位置的一点知识

[算法]插入排序和希尔排序

这里简单的介绍一下插入排序和希尔排序的算法实现&#xff0c;为简单起见&#xff0c;排序为升序且排序的数组是整形数组。 一、插入排序 &#xff08;一&#xff09;、算法思路 把数组里的第一个元素视为有序的&#xff0c;然后取第二个元素与前面的元素作比较&#xff0c;如…

【秋招笔试题】小Q的树

解析&#xff1a;分析易得走过的路中至多存在一个分叉&#xff0c;则维护每个结点接下来的路的最大值与次大值然后相加即可。 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define int long long const int MAXN 1…