メインコンテンツまでスキップ

cv - 画像を形状の輪郭情報に変換 (:cv_to_shapes)

宣言

形状セット, 可視化画像 = 画像:cv_to_shapes([輪郭一致設定])

パラメータ

  • 輪郭マッチングオプション
    省略可能なテーブル

    輪郭マッチングオプションのフィールド
    {
    should_visualize = false | true, -- 省略可能。可視化出力を行うか。デフォルトは false
    closed = false | true, -- 省略可能。図形を閉じるか。デフォルトは false
    blur_size = integer_value, -- 省略可能。ぼかしカーネルのピクセル数。正の奇数のみ。デフォルトは 3
    canny_threshold1 = 100, -- 省略可能。エッジの最小しきい値。デフォルトは 100
    canny_threshold2 = 200, -- 省略可能。エッジの最大しきい値。デフォルトは 200
    approx_epsilon = integer_value, -- 省略可能。複雑な輪郭を単純化するための、周長に対する輪郭近似の比率。デフォルトは 2
    }

戻り値

  • 形状一覧
    テーブル。画像上にある形状の頂点情報

    形状一覧の構造
    {
    { -- 形状 1
    { -- 形状 1 の頂点 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 形状 1 の頂点 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- 形状 2
    { -- 形状 2 の頂点 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 形状 2 の頂点 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    }
  • 可視化画像
    画像オブジェクト。options.should_visualize が true の場合、この戻り値は可視化結果の画像オブジェクト

説明

画像上の輪郭を形状の頂点情報に変換する
変換する画像には複雑なものを避け、輪郭が明確な閉じた図形を推奨

local cv = require("image.cv")
local img = image.load_file(XXT_SCRIPTS_PATH..'/1.png')
-- 戻り値は形状の一覧で、複数の形状が含まれる場合がある
local shapes, visimg = img:cv_to_shapes({
blur_size = 3, -- ぼかしカーネルのサイズ
approx_epsilon = 2, -- アンチエイリアス率 0~100
closed = true, -- 閉じた図形
should_visualize = true, -- 可視化出力を行うか。true の場合、二番目の戻り値は画像
})
nLog(shapes) -- 形状一覧の頂点情報を出力
dialog():add_image(visimg):show() -- 形状画像を可視化して表示