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://xiahunao.cn/news/3270166.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

《python程序语言设计》第6章14题 估算派值 类似莱布尼茨函数。但是我看不明白

这个题提供的公式我没看明白,后来在网上找到了莱布尼茨函数 c 0 for i in range(1, 902, 100):a (-1) ** (i 1)b 2 * i - 1c a / bprint(i, round(4 / c, 3))结果 #按题里的信息,但是结果不对,莱布尼茨函数到底怎么算呀。

无人机的飞行模式

无人机的飞行模式是提升飞行效率和完成特定任务的关键。现代无人机通常配备多种智能飞行模式,这些模式能够帮助飞行员高效且安全地完成飞行任务。以下是几种常见的无人机飞行模式及其应用场景的解析: 一、跟随模式 应用场景:跟随模式非常适…

【React】详解classnames工具:优化类名控制的全面指南

文章目录 一、classnames的基本用法1. 什么是classnames?2. 安装classnames3. 导入classnames4. classnames的基本示例 二、classnames的高级用法1. 动态类名2. 传递数组3. 结合字符串和对象4. 结合数组和对象 三、实际应用案例1. 根据状态切换类名2. 条件渲染和类名…

Halcon 设置处理区域AOI(用户交互,drawing_object)

主程序 * 1.加载并显示图片 ************************* read_image (Image, ./model)dev_get_window (WindowHandle) set_display_font (WindowHandle, 14, sans, true, false) dev_set_draw (margin) dev_set_line_width (3) dev_display (Image)* 读取字典文件 ************…

35.【C语言】详解函数递归

目录: 定义 作用 例子1~3 拓展学习 趣味练习 1.定义:函数自己调用自己(递推回归) int main() {main()return 0; } 这样容易死循环,导致爆栈(Stack Overflow) 所以需要设立限制条件,使执行时越来越接近条…

DOS攻击实验

实验背景 Dos 攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段,残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃。 实验设备 一个网络 net:cloud0 一台模…

顺序表算法题

在学习了顺序表专题后,了解的顺序表的结构以及相关概念后就可以来试着完成一些顺序表的算法题了,在本篇中将对三道顺序表相关的算法题进行讲解,希望能对你有所帮助,一起加油吧!!! 1.移除元素 2…

SpringBoot知识笔记

一、基本概念 1.1 特性 起步依赖 自动配置 其它特性:内嵌的Tomcat、Jetty(无需部署WAR文件),外部配置,不需要XML配置(properties/yml)。 1.2 配置文件 SpringBoot提供了多种属性配置方式 //application.properties server.port=9090 server.servlet.context-path…

Linux下Centos7中的gcc/g++

命为志存。 —— 朱熹 Linux中C/C翻译过程 1、样例介绍1、1、gcc版本过低不能编译成功1、2、编写 .cxx或.cc或.cpp代码(都是C) 2、程序的翻译过程2、1、条件编译(补充)2、2、语言历史 3、深入理解链接3、1、静态链接的使用场景 1、样例介绍 1、1、gcc版本过低不能编译成功 in…

前端自动化测试(一):揭秘自动化测试秘诀

目录 [TOC](目录)前言自动化测试 VS 手动测试测试分类何为单元测试单元测试的优缺点优点缺点 测试案例测试代码 测试函数的封装实现 expect 方法实现 test 函数结语 正文开始 , 如果觉得文章对您有帮助,请帮我三连订阅,谢谢💖&…

android(安卓)最简单明了解释版本控制之MinSdkVersion、CompileSdkVersion、TargetSdkVersion

1、先明白几个概念 (1)平台版本(Android SDK版本号) 平台版本也就是我们平时说的安卓8、安卓9、安卓10 (2)API级别(API Level) Android 平台提供的框架 API 被称作“API 级别” …

Android APK混淆处理方案分析

这里写目录标题 一、前言1.1 相关工具二、Apk 分析2.1 apk 解压文件2.2 apk 签名信息2.3 apk AndroidManifest.xml2.4 apk code三、Apk 处理3.1 添加垃圾文件3.2 AndroidManifest.xml 处理3.3 dex 混淆处理3.4 zipalign对齐3.5 apk 重新签名3.6 apk 安装测试四、总结一、前言 提…

Unity打包设置

1.Resolution and Presentation (分辨率和显示) Fullscreen Window (全屏窗口): 应用程序将以全屏窗口模式运行,但不会独占屏幕。适用于想要全屏显示但仍需访问其他窗口的情况。 Resizable Window (可调整大小的窗口): 允许用户调整应用程序窗口的大小。适用于窗口…

Selenium相对定位

测试网站:Web form 相对定位的方法: above():定位基准元素上方的元素below():定位基准元素下方的元素to_left_of():定位基准元素左侧的元素to_right_of():定位基准元素右侧的元素near() :定位基…

糊涂工具包和commons包(Java)

工具包(Commons-io) 介绍: Commons是apache开源基金组织提供的工具包,里面有很多帮助我们提高开发效率的API 比如: StringUtils 字符串工具类 NumberUtils 数字工具类 ArrayUtils 数组工具类 RandomUtils…

集群自组网应急指挥体系应用技术分析

一、技术背景与意义 随着社会的快速发展和科技的日益进步,面对自然灾害、突发事件等紧急情况,快速有效的应急指挥体系成为维护社会稳定和人民生命财产安全的重要保障。集群自组网应急指挥体系,以其快速部署、高可靠性、强抗毁性等优势&#…

高速传输新体验:探索最新USB-C移动硬盘盒的无限可能

在数字化时代,数据存储的重要性不言而喻,而硬盘盒作为连接外部硬盘与计算机的关键设备,其功能也在不断进化。近年来,随着技术的创新与发展,市场上出现了一种新型硬盘盒——它不仅能安全、高效地存储和传输数据&#xf…

JAVA笔记十七

十七、File-IO流 1.I/O的概念和java.io包 (1)输入:外部源—>程序 输出:程序—>输出目标 外部源、输出目标:磁盘文件、网络连接、内存缓存等 (2)java程序通过流执行I/O 流是一种抽象,可以用来产生信息或者使用信息&#…

Python基础——第一个Python程序

Python基础——第一个Python程序 一、编写和运行代码的工具1.1 为什么需要工具1.2 默认的交互式环境1.3 文本编辑神器 - Visual Studio Code1.4 专业的集成开发环境 - PyCharm 二、编写第一个Python程序2.1 在PyCharm中编写“Hello, World!”程序2.2 运行“Hello, World!”程序…

期指期货做空什么意思?股指期货做空怎么操作?

“期指做空”是一种金融交易策略,主要涉及股指期货。在这种策略中,投资者并没有实际持有股票,而是通过期货合约来进行交易。具体来说,做空是指在期货市场中,投资者预期某项资产的价格将下跌,因此选择先卖出…