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())

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

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值