Saltar al contenido principal

cv - Buscar contornos en una imagen (:cv_find_shapes)

Declaración

información_de_formas_encontradas, imagen_visualizada = imagen:cv_find_shapes(conjunto_de_formas[, opciones_de_búsqueda_de_formas])

Parámetros

  • conjunto_de_formas
    Tabla con la información de los vértices de una o varias formas que se buscarán.

    Estructura del conjunto de formas
    {
    { -- Forma 1
    { -- Vértice 1 de la forma 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- Vértice 2 de la forma 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- Forma 2
    { -- Vértice 1 de la forma 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- Vértice 2 de la forma 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    }
  • opciones_de_búsqueda_de_formas
    Tabla opcional con la configuración de coincidencia de contornos.

    Campos de las opciones de búsqueda de formas
    {
    should_visualize = false | true, -- Parámetro opcional: si se muestra la salida; predeterminado false
    closed = false | true, -- Parámetro opcional: si la figura es cerrada; predeterminado false
    min_area = number_value, -- Parámetro opcional: área mínima; predeterminado -1, sin límite
    max_area = number_value, -- Parámetro opcional: área máxima; predeterminado -1, sin límite
    blur_size = integer_value, -- Parámetro opcional: píxeles del núcleo de desenfoque; solo números impares positivos; predeterminado 3
    canny_threshold1 = 100, -- Parámetro opcional: umbral de borde mínimo; predeterminado 100
    canny_threshold2 = 200, -- Parámetro opcional: umbral de borde máximo; predeterminado 200
    diff_threshold = number_value, -- Parámetro opcional: umbral de diferencia; cuanto menor, mayor similitud; predeterminado 0.001
    approx_epsilon = integer_value, -- Parámetro opcional: porcentaje del perímetro de aproximación del contorno para simplificar contornos complejos; predeterminado 2
    }

Valor de retorno

  • información_de_formas_encontradas
    Tabla.

    Estructura de la información de formas encontradas
    {
    { -- Lista de formas que coinciden con la forma 1
    { -- Primera forma que coincide con la forma 1
    diff_score = number_value, -- Diferencia entre esta forma y la forma 1; cuanto menor, mayor similitud
    { -- Vértice 1 de la primera forma que coincide con la forma 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- Vértice 2 de la primera forma que coincide con la forma 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- Segunda forma que coincide con la forma 1
    diff_score = number_value, -- Diferencia entre esta forma y la forma 1; cuanto menor, mayor similitud
    { -- Vértice 1 de la segunda forma que coincide con la forma 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- Vértice 2 de la segunda forma que coincide con la forma 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    },
    { -- Lista de formas que coinciden con la forma 2
    { -- Primera forma que coincide con la forma 2
    diff_score = number_value, -- Diferencia entre esta forma y la forma 2; cuanto menor, mayor similitud
    { -- Vértice 1 de la primera forma que coincide con la forma 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- Vértice 2 de la primera forma que coincide con la forma 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- Segunda forma que coincide con la forma 2
    diff_score = number_value, -- Diferencia entre esta forma y la forma 2; cuanto menor, mayor similitud
    { -- Vértice 1 de la segunda forma que coincide con la forma 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- Vértice 2 de la segunda forma que coincide con la forma 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    },
    ...
    }
  • imagen_visualizada
    Objeto de imagen. Cuando options.should_visualize es true, este valor de retorno contiene la visualización.

Descripción

Busca en una imagen una o varias formas. Las formas geométricas estándar se pueden generar mediante funciones.

Ejemplo

function make_triangle(side_len) -- Crear un triángulo equilátero; solo necesita la longitud del lado y genera automáticamente 3 vértices
local hf = math.sqrt(3)/2
local h = math.floor(hf * side_len)
return {
{
["x"] = 1,
["y"] = h,
},
{
["x"] = side_len,
["y"] = h,
},
{
["x"] = side_len // 2,
["y"] = 1,
},
}
end

function make_rectangle(side_len) -- Crear un cuadrado; solo necesita la longitud del lado y genera automáticamente 4 vértices
return {
{ -- Arriba a la izquierda
["x"] = 1,
["y"] = 1,
},
{ -- Abajo a la izquierda
["x"] = 1,
["y"] = side_len,
},
{ -- Abajo a la derecha
["x"] = side_len,
["y"] = side_len,
},
{ -- Arriba a la derecha
["x"] = side_len,
["y"] = 1,
},
}
end
-- El valor de retorno es una lista de listas de formas; cada lista corresponde a las formas encontradas para una forma de los parámetros
-- Buscar aquí un triángulo equilátero y un cuadrado
local info, visimg = screen.image():cv_find_shapes({make_triangle(45), make_rectangle(40)}, {
min_area = 2000, -- Área mínima
max_area = 20000, -- Área máxima
diff_threshold = 0.005, -- Tolerancia máxima de deformación; cuanto menor, mayor similitud
approx_epsilon = 1,
shape_match_mode = 3,
closed = true, -- Figura cerrada
should_visualize = true, -- Si se muestra la salida; con true, el segundo valor de retorno es una imagen
})

nLog(info[1]) -- Mostrar la lista de formas que coinciden con el triángulo equilátero
nLog(info[2]) -- Mostrar la lista de formas que coinciden con el cuadrado

dialog():add_image(visimg):show() -- Mostrar visualmente la imagen de salida