Coincidencia de plantillas en el cuarto día de Openmv

Lo que aprendí hace unos días fue solo sobre el reconocimiento de color y Apriltag, pero ¿y si el color es el mismo? No es una cosa reconocer esa cosa, lo cual no es bueno, por lo que se debe derivar la coincidencia de plantillas. Das una imagen de plantilla en la memoria de openmv, es decir, la apariencia de tu objetivo, y puedes encontrar el objetivo que debe ser así de acuerdo con la apariencia. ¿Qué significa? Entiendo que el significado de cierto significa ambos tamaños y forma Básicamente lo mismo, no importa si es demasiado pequeño o demasiado grande, y la forma debe ser aproximadamente igual. Se utiliza el algoritmo ncc, que solo puede hacer coincidir patrones que son básicamente del mismo tamaño y ángulo que la imagen de la plantilla. La limitación es relativamente grande.Si el patrón de destino en el campo de visión es un poco más grande o más pequeño que la imagen de la plantilla, es posible que la coincidencia no sea exitosa.

Entonces, ¿dónde está el uso?

  • La coincidencia de plantillas es adecuada para situaciones en las que se determina la distancia entre la cámara y el objeto de destino y no se requiere un movimiento dinámico. Por ejemplo, es adecuado para la detección de objetos específicos en la línea de montaje, pero no es adecuado para que el automóvil rastree una pelota de voleibol en movimiento (porque la distancia entre la pelota de voleibol en movimiento y la cámara es dinámica, el tamaño de la pelota de voleibol visto por el la cámara cambiará y no será exactamente igual a la imagen de la plantilla).

A continuación se muestra el código oficial.

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

Aquí hay una función muy importante de un vistazo.

那就是imagen.find_template( plantillaumbral [,  roi [,  paso=2 [,  búsqueda=imagen.SEARCH_EX ]]])

Esta función es para devolver el roi de la plantilla que buscas, para que puedas enmarcarla ¿Está enmarcada? ¡QQVGA también, porque para mejorar la velocidad!

¿Cuáles son los parámetros que se pasan?

1: Una foto de la plantilla que buscas

2: valor de umbral, parece inexplicable, se siente como si hubiera dado un valor grande que es preciso pero lento, y un valor pequeño es rápido pero inexacto. La depuración pequeña es útil.

3: También es algo inexplicable, es decir, ignorar la cantidad de píxeles cuando buscas una plantilla, también lo es para la velocidad del algoritmo.

4: Esta es la forma de encontrarlo. La mayoría de las cosas internas usan este Ex. Por cierto, 3 debe asignarse de manera útil en EX.

Lo que devuelve es un roi. Si no hay nadie, no es ninguno, así que obviamente puedes usar if para juzgar si se encuentra. Si se encuentra, usa roi y dibuja directamente un marco para enmarcarlo.

Cabe señalar que debe introducir el módulo de método de búsqueda e insertar una tarjeta SD para guardar las imágenes de su plantilla, y el formato debe cambiarse a pmg

Es solo que puede usar el búfer para dibujar un roi para guardar la imagen también está permitido.

Otro reconocimiento de plantilla muy importante es la imagen en escala de grises, es decir, es una imagen en blanco o en negro, y esos círculos o marcos de colores no se pueden usar, y no es imposible usarlo, es inútil si se usa.

¿Qué pasa con varias plantillas? Quiero identificar varias cosas o diferentes aspectos de una cosa.

lo primero guardado

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

¿Y que? Con tantas cosas, solo puede reconocer una a la vez. Por supuesto, use el bucle for anterior para recorrer una por una.

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

 Entonces el marco de abajo será 0.0

/./ Si no le molesta, puede capturar muchas fotos de un objeto, y luego se puede reconocer incluso si se acerca o se aleja. 0..0

Supongo que te gusta

Origin blog.csdn.net/weixin_63163242/article/details/128411112
Recomendado
Clasificación