opencv2では、私はいくつかのプロセスの後に2つのバイナリMat(白は前景です)を持っています。最初のMatは2番目のMatの部分グラフです。つまり:イメージをスムーズに他のイメージに分割する方法は?
Mat mat_small = ....
Mat mat_big = .....
Mat result = someProcess(mat_small, mat_big)
私は結果= mat_big - mat_smallを行うことができます。しかし、mat_bigの輪郭は残っています。長くて薄い殻のように見えます。シェルを外したい。
私はcv :: dilateとcv :: erodeを試しました。ほとんどの場合、正常に動作しますが、細長いシェルがはっきりとは削除されないことがあります。
そして、幅が薄いものを検出する方法はありますか?私がそれをすることができれば、私は私の問題を解決することもできます。しかし、私はそれを作る方法を知らない。
更新右から左への自己回答
から、画像がMat_big、Mat_small、Mat_minus(Mat_minus = Mat_big - Mat_small)であり、Mat_result:
右から左の画像はMat_big、Mat_small、Mat_minus(Mat_minus = Mat_big - Mat_small)、Mat_resultです。
mat_minusでは、削除したい細長い輪郭がいくつかあります。
私はcv :: erodeとcv :: dilateを使って4番目の画像に結果を得ました。ほとんどの場合、正常に動作しますが、細長い輪郭が少し強くなると、輪郭をはっきりと除去できません。
このような(輪郭もう少し強くなる):
CV ::侵食後の後に除去されていない細長いある右に輪郭。もちろん、私はcv :: erodeを何度もやって細長い輪郭を取り除くことができます。しかし、それは合理的な方法ではありません。
ある画像を別の画像から滑らかに引く方法はありますか?
画像をアップロードできますか? –
@Rick M.ありがとう。私の質問を補うために、答えのいくつかの画像を更新しました。 – Doone
答えとしてではなく、質問に詳細を追加してください。画像を見ると、Mat_minallで「細い線」を得ないように減算する前に、Mat_small画像を拡大します。より太い線の輪郭は、あなたがそれを行うことができるもの、厚さを得ること、それに応じて浸食を適用すること、すなわち異なる画像を有することを私に伝えます。深度に応じてカーネルサイズを変更してください。行を賢明に反復するか、輪郭検出から取得することができます。 –