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()