cv - Rechercher des contours dans une image (:cv_find_shapes)
Déclaration
found_shapes, visualized = image:cv_find_shapes(shapes[, options])
Paramètres
-
shapes Table : informations des sommets d’une ou plusieurs formes à rechercher
Structure du paramètre shapes
{
{ -- forme 1
{ -- sommet 1
["y"] = number_value,
["x"] = number_value,
},
{ -- sommet 2
["y"] = number_value,
["x"] = number_value,
},
...
},
{ -- forme 2
{ -- sommet 1
["y"] = number_value,
["x"] = number_value,
},
{ -- sommet 2
["y"] = number_value,
["x"] = number_value,
},
...
},
...
} -
options Table facultative : options de correspondance des contours
Champs d’options
{
should_visualize = false | true, -- facultatif, produire une visualisation, par défaut false
closed = false | true, -- facultatif, fermer les formes, par défaut false
min_area = number_value, -- facultatif, aire minimale, par défaut -1 (sans limite)
max_area = number_value, -- facultatif, aire maximale, par défaut -1 (sans limite)
blur_size = integer_value, -- facultatif, taille du noyau de flou, nombre impair positif uniquement, par défaut 3
canny_threshold1 = 100, -- facultatif, seuil inférieur de Canny, par défaut 100
canny_threshold2 = 200, -- facultatif, seuil supérieur de Canny, par défaut 200
diff_threshold = number_value, -- facultatif, seuil de différence, une valeur plus petite indique une plus grande similarité, par défaut 0.001
approx_epsilon = integer_value, -- facultatif, pourcentage du périmètre d’approximation du contour, par défaut 2
}
Valeur de retour
-
found_shapes Table
Structure des formes trouvées
{
{ -- formes correspondant à la forme d’entrée 1
{ -- première forme correspondant à la forme 1
diff_score = number_value, -- plus petit signifie plus similaire
{ -- sommet 1
["y"] = number_value,
["x"] = number_value,
},
{ -- sommet 2
["y"] = number_value,
["x"] = number_value,
},
...
},
{ -- deuxième forme correspondant à la forme 1
diff_score = number_value,
{ -- sommet 1
["y"] = number_value,
["x"] = number_value,
},
{ -- sommet 2
["y"] = number_value,
["x"] = number_value,
},
...
},
...
},
{ -- formes correspondant à la forme d’entrée 2
{ -- première correspondance
diff_score = number_value,
{ -- sommet 1
["y"] = number_value,
["x"] = number_value,
},
{ -- sommet 2
["y"] = number_value,
["x"] = number_value,
},
...
},
{ -- deuxième correspondance
diff_score = number_value,
{ -- sommet 1
["y"] = number_value,
["x"] = number_value,
},
{ -- sommet 2
["y"] = number_value,
["x"] = number_value,
},
...
},
...
},
...
} -
visualized Objet image ; lorsque
options.should_visualizevauttrue, il s’agit de l’image de visualisation
Description
Recherche une ou plusieurs formes dans une image. Les formes régulières standard peuvent être produites par des fonctions.
Exemple
function make_triangle(side_len)
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)
return {
{ ["x"] = 1, ["y"] = 1 },
{ ["x"] = 1, ["y"] = side_len },
{ ["x"] = side_len, ["y"] = side_len },
{ ["x"] = side_len, ["y"] = 1 },
}
end
local info, visimg = screen.image():cv_find_shapes({make_triangle(45), make_rectangle(40)}, {
min_area = 2000,
max_area = 20000,
diff_threshold = 0.005,
approx_epsilon = 1,
shape_match_mode = 3,
closed = true,
should_visualize = true,
})
nLog(info[1])
nLog(info[2])
dialog():add_image(visimg):show()