Openmv第四天之模板匹配

这篇具有很好参考价值的文章主要介绍了Openmv第四天之模板匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前几天学的内容是只是关于颜色和Apriltag的识别出来,但是如果颜色一样呢?那东西识别出来不就一个玩意儿了,这样是不好的,所以应该就衍生出了模板匹配。你在openmv内存里面给定一个模板图片,也就是你的目标的样子,你就可以根据样子去找一定是这个样子的目标,一定是什么意思呢,一定的意思我理解为是大小形状都要基本上一样,小了不行,大了也不行,形状也要大致相等。采用的是ncc算法,只能匹配与模板图片大小和角度基本一致的图案。局限性相对来说比较大,视野中的目标图案稍微比模板图片大一些或者小一些就可能匹配不成功。

那么用处在哪里呢?

  • 模板匹配适应于摄像头与目标物体之间距离确定,不需要动态移动的情况。比如适应于流水线上特定物体的检测,而不适应于小车追踪一个运动的排球(因为运动的排球与摄像头的距离是动态的,摄像头看到的排球大小会变化,不会与模板图片完全一样)。

下面是官方代码

# 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
#从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, 
#SEARCH_DS两个需要的部分,而不把image模块全部引入。

# 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("/template.pgm")
#加载模板图片

clock = time.clock()

# Run template matching
while (True):
    clock.tick()
    img = sensor.snapshot()

    # 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, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
    #find_template(template, threshold, [roi, step, search]),threshold中
    #的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
    #注意roi的大小要比模板图片大,比frambuffer小。
    #把匹配到的图像标记出来
    if r:
        img.draw_rectangle(r)

    print(clock.fps())

这里有个一眼就觉得很重要的函数

那就是image.find_template(templatethreshold[, roi[, step=2[, search=image.SEARCH_EX]]])

这个函数就是返回你所想找的模板的roi,这样你就可以框.框起来了?QQVGA也要,因为为了提高速度!

里面传入的参数呢有哪些呢?

1:你想找的模板的图片

2:阈值,看起来莫名其妙,感觉就是你给大了准确但慢,给小了就是快但不准确的东西,小调试有用。

3:也是一个莫名其妙的东西,就是要忽略像素的个数在你找模板的时候,也是为了算法速度的。

4:这个就是寻找方式了,内部的东东,大多数用这个Ex的这个东西,对了3必须要在EX下有用赋值。

他返回回来的就是一个roi 没有的话就是none,所以很明显可以用if判断是否有找到,找到了的话,就用roi了,直接画个框框,框住他。

要注意的是 这里要引入寻找方法模块 还有要插一个sd卡来存你的模板图片,格式要改成pmg

而已你可以用buffer里面画一个roi来存图片也是允许的。

还有一个最重要的 这个模板识别是灰度图,也就是都是要么白要么黑图片,那些彩色的圈圈或者框框就不能用了,也不是不能用,用了等于没用。

多模板呢咋办呢,我想识别多个东西,或者一个东西的不同样子

第一改存的东西

templates = ["/0.pgm", "/1.pgm", "/2.pgm", "/6.pgm"] 

然后呢?这么多东西,他一次只能识别一个,当然用前面的for循环,一个个遍历就好了

 for t in templates:
        template = image.Image(t)
        #对每个模板遍历进行模板匹配
        r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))

 然后下面画框框就行了0.0

/./ 你如果不嫌麻烦 你可以截取一个物体的很多照片,然后他放大放小也能被识别出来了0..0文章来源地址https://www.toymoban.com/news/detail-602751.html

到了这里,关于Openmv第四天之模板匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openmv学习十一:边缘检测

    代码:  效果  

    2024年02月12日
    浏览(37)
  • 【openmv学习笔记:1】色块查找

    星瞳科技openmv官方资料 嵌入式图像处理环境: 硬件平台:OpenMV4 Cam H7 Plus 语言:Micro python 软件:Openmv IDE 首先对摄像头进行一个初始化来显示图像。引入模块 sensor 。 我们可以在右上角看到摄像头拍摄到并传输回来的画面。 可以在Openmv涂上导热硅胶和装上散热塔进行散热,

    2024年02月13日
    浏览(37)
  • K210----openMV连体学习---01.对比学习基础

    目录 前言: 一、开发环境的快速搭建: 二、基本实验: 1、点亮小灯: 2、流水灯: 3、按键 4.外部中断: 5.定时器: 本人所用为01 studio的pyAi-K210和pyAI-OpenMV4,本人在学习完K210后,学习openMV时发现很多实验K210和openMV可以一起学习,所以写下此篇分享,本人基本都是个人笔记,

    2024年02月15日
    浏览(34)
  • 学习记录之openmv和STM32F103的通信

    分上下位机,下位机向上位机发送数据。(上位机控制,下位机收集数据) 可能用到的函数: UART :通用异步 收/发器 USART :通用同步/异步 收/发器 USART_ init() 串口初始化:波特率、数据字长,奇偶校验,硬件流控及收发使能 USART_ Cmd 使能串口                             

    2024年02月14日
    浏览(34)
  • 【OpenMV学习笔记(一)】识别色块并与STM通信传输中心坐标

    一直有想要写些东西的想法正好最近比较闲以及大创项目和电赛备赛需要用到OpenMV所以就记录一下学习过程。因为小白第一次写文章有什么错误希望大家包含在评论区指正。 2.1、Openmv端 这里OpenMV端仅作为数据的发送端,所以只需要共地,以及OpenMV的TX(P4)与开发板的RX端连

    2024年02月14日
    浏览(48)
  • openmv底层算法剖析---梦飞openmv前传

    前言 接梦飞openmv博客,本篇重点剖析openmv的算法和功能实现。openmv是国外开源团队依托mirco-python架构开发的一套基于stm32内核优化算法的图像识别模组,其目的是让图像视觉算法应用开发更加简便,算法运行效率更高,其底层代码全部由C语言实现,上层代码用micro-python开发。

    2024年02月13日
    浏览(38)
  • OpenMV快速上手 | OpenMV硬件版本概述及HelloWorld

    OpenMV是一个国外的开源项目, 是一款低价、可扩展、支持Python的机器视觉模块 ,这个模块的目标是成为“机器视觉世界的Arduino “。 OpenMV的官网:https://openmv.io/。 OpenMV是完全开源的硬件 ,意味着所有版本的OpenMV硬件,你都可以在github下载到开发板的原理图、pcb,甚至是芯片

    2024年02月02日
    浏览(28)
  • OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

    注意: 只有 OpenMV4 Plus 可以自己训练神经网络,其他版本的性能不够 本节讲解如何使用 edgeimpulse.com 网站来 自行训练神经网络模型 ,进而实现机器学习的功能 edgeimpulse.com 是一个在线网站,是一个为嵌入式产品非常快速地生成嵌入式上面使用的神经网络的模型,非常地易用且

    2024年02月15日
    浏览(53)
  • openmv云端训练神经网络自动生成openmv的神经网络模型

    打开openmv工具栏如图所示,点击新数据集  弹出如下界面,这里我选择的是我自己新建的new date文件夹,你们选择自己新建的文件夹即可  接下来我们点击左边红框框起来的地方,可得到中间那个界面,可自己创建名称  左上角就是我创建好的两个,接下来我们点击下面红框

    2024年02月12日
    浏览(35)
  • OpenMV上的矩阵库

    众所周知啦,numpy是python中非常重要的的一个库,支持各种矩阵的操作。在我们比赛的使用的art上是不可以调用的。但我们在art上确实会有一定的需求,比如进行透视变换。这时候就需要一个矩阵运算库了。 其实OpenMV的文档上也给出了几个第三方的矩阵运算库,它们都很不错

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包