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. Cuandooptions.should_visualizees 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