Encuentra bloques de colores

Vídeo tutorial 4 - Reconocimiento de color: https://singtown.com/learn/49993/

función find_blobs

El seguimiento de la pelota es la función más utilizada de OpenMV. Se puede encontrar en Comience rápidamente en 10 minutos.\ Los bloques de colores se pueden encontrar a través de la función find_blobs. Analicemos los detalles de find_blobs.

image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)

Hay muchos parámetros aquí.

  • umbrales es el umbral de color. Nota: este parámetro es una lista y puede contener varios colores. Si solo necesita un color, entonces solo necesita un valor de color en esta lista. Si desea múltiples umbrales de color, entonces esta lista necesita múltiples umbrales de color. Nota: Puede llamar al método de código en el objeto de bloque de color devuelto para determinar de qué color es el bloque de color.
red = (xxx,xxx,xxx,xxx,xxx,xxx)
blue = (xxx,xxx,xxx,xxx,xxx,xxx)
yellow = (xxx,xxx,xxx,xxx,xxx,xxx)

img=sensor.snapshot()
red_blobs = img.find_blobs([red])

color_blobs = img.find_blobs([red,blue, yellow])
  • roi es "región de interés". Se introdujo en Estadísticas de uso.

    left_roi = [0,0,160,240]\ blobs = img.find_blobs([red],roi=left_roi)

  • x_stride es el píxel con el ancho más pequeño en la dirección x del bloque de color que se busca. El valor predeterminado es 2. Si solo desea buscar bloques de color con un ancho de más de 10 píxeles, establezca este parámetro en 10:

    blobs = img.find_blobs([red],x_stride=10)

  • y_stride es el píxel con el ancho más pequeño en la dirección y del bloque de color que se busca. El valor predeterminado es 1. Si solo desea buscar bloques de color con un ancho de más de 5 píxeles, establezca este parámetro en 5:

    blobs = img.find_blobs([red],y_stride=5)

  • invertir invierte el umbral y busca colores distintos del umbral como umbral

  • area_threshold umbral de área, si el área enmarcada del bloque de color es menor que este valor, se filtrará

  • pixels_threshold umbral de número de píxeles, si el número de píxeles en el bloque de color es menor que este valor, se filtrará

  • fusionar Fusionar, si está configurado en Verdadero, luego fusionar todos los blobs superpuestos en uno.\ NOTA: Esto fusionará todas las manchas, sin importar de qué color sean. Si desea confundir manchas de varios colores, simplemente llame a find_blobs con diferentes umbrales de color por separado.

all_blobs = img.find_blobs([red,blue,yellow],merge=True)

red_blobs = img.find_blobs([red],merge=True)
blue_blobs = img.find_blobs([blue],merge=True)
yellow_blobs = img.find_blobs([yellow],merge=True)
  • límite de margen, si se establece en 1, dos manchas también se fusionarán si están separadas por un píxel.

límite

La estructura de un umbral de color es la siguiente:

red = (minL, maxL, minA, maxA, minB, maxB)

Los valores en la tupla son los valores máximo y mínimo de L A B respectivamente.

Si desea obtener este umbral en la imagen del IDE, consulte: [Comience rápidamente en 10 minutos] (/quick-starter.md)

En la nueva versión del IDE, hay una herramienta de selección de umbral más conveniente, ver más abajo.

Herramienta de selección de umbral de color

Se ha agregado una herramienta de selección de umbral al IDE de OpenMV, que facilita enormemente la depuración de umbrales de color.

Primero ejecute hello world.py para permitir que el framebuffer en el IDE muestre el patrón.\ \ Luego abra Herramientas → Mechine Vision → Editor de umbrales\

Haga clic en Frame Buffer para obtener la imagen en el IDE y en Image File para seleccionar un archivo de imagen usted mismo.

Arrastre los seis controles deslizantes para ver los resultados del umbral en tiempo real. El resultado que queremos es convertir nuestro color objetivo en blanco y todos los demás colores en negro.

blobs es una lista

El objeto find_blobs devuelve una lista de varios blobs. (Tenga en cuenta la distinción entre manchas y manchas. Este es solo un nombre que se usa para distinguir varios bloques de color de un bloque de color).\ Una lista es similar a una matriz en lenguaje C. Una lista de blobs contiene muchos objetos blobs. Los objetos blobs son bloques de color.

blobs = img.find_blobs([red])

Las manchas son muchos bloques de colores.

Puede utilizar un bucle for para buscar todos los bloques de colores.

for blob in blobs:
    print(blob.cx())

Para conocer el uso de bucles for, consulte conocimientos básicos de Python

objeto de bloque de color blob

Blob tiene varios métodos:

  • blob.rect() devuelve el marco exterior de este bloque de color: una tupla rectangular (x, y, w, h), que se puede usar directamente en image.draw_rectangle.

  • blob.x() devuelve la coordenada x (int) del marco exterior del bloque de color, que también se puede obtener mediante blob[0].

  • blob.y() devuelve la coordenada y (int) del marco exterior del bloque de color, que también se puede obtener mediante blob[1].

  • blob.w() devuelve el ancho w (int) del marco exterior del bloque de color, que también se puede obtener mediante blob[2].

  • blob.h() devuelve la altura h (int) del marco exterior del bloque de color, que también se puede obtener mediante blob[3].

  • blob.pixels() devuelve el número de píxeles del bloque de color (int), que también se puede obtener mediante blob[4].

  • blob.cx() devuelve la coordenada x central (int) del marco exterior del bloque de color, que también se puede obtener mediante blob[5].

  • blob.cy() devuelve la coordenada y central (int) del marco exterior del bloque de color, que también se puede obtener mediante blob[6].

  • blob.rotation() devuelve el ángulo de rotación del bloque de color en radianes (flotante). Si el bloque de color se parece a un lápiz, entonces este valor será de 0~180°. Si la muestra de color es un círculo, entonces este valor es inútil. Si el bloque de color no tiene ninguna simetría, entonces obtendrás 0~360°, que también se puede obtener mediante blob[7].

  • blob.code() devuelve un número de 16 bits, cada bit corresponde a cada umbral. Por ejemplo:

    blobs = img.find_blobs([rojo, azul, amarillo], merge=True)

Si el bloque de color es rojo su código es 0001, y si es azul su código es 0010. Nota: Un blob se puede fusionar. Si es un blob rojo y azul, entonces el blob es

  1. Esta función se puede utilizar para buscar códigos de color. También se puede obtener a través de blob[8].

  2. blob.count() Si merge=True, varios blobs se fusionarán en uno y esta función devuelve este número. Si merge=False, el valor de retorno es siempre 1. También se puede obtener a través de blob[9].

  3. blob.area() devuelve el área del cuadro exterior del bloque de color. Debe ser igual a (w * h)

  4. blob.density() devuelve la densidad de la mancha de color. Esto es igual al número de píxeles del parche dividido por el área del cuadro delimitador. Si la densidad es baja, entonces el objetivo no está muy bien fijado.\ Por ejemplo, para identificar un círculo rojo, el blob.pixels() devuelto es el número de píxeles del círculo objetivo y el blob.area() es el área del cuadrado circunscrito del círculo.

results matching ""

    No results matching ""