Aller au contenu principal

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_visualize vaut true, 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()