質問するログイン新規登録

Q&A

2回答

6979閲覧

opencvで画像の切り抜き

daodao

総合スコア13

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

1クリップ

投稿2018/06/06 13:36

0

1

添付のようなアパレルの画像から輪郭を抽出、切り抜きを実現したいのですが、
経験が少ないため、どのようにアプローチすべきか悩んでします。

イメージ説明

下記サイトを参考にプロセスを考えました。
https://qiita.com/icoxfog417/items/53e61496ad980c41a08e
前提ですが背景は単色(白)、服の色や柄は汎用的に対応したいと考えています。
(輪郭には関係ないかもしれませんが)

①グレースケール
②影をマスク
③Canny
④findContours
⑤輪郭の近似
⑥切り抜き

環境は、opencv、pythonです。
#ソース
img = cv2.imread('XXXXXXXX')
①グレースケール
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

②影をマスク ここがうまくいきません。そもそもマスクなのかという疑問もあります。

③Canny
edges = cv2.Canny(img_gray, 80, 100)
im2, contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

④findContours
for c in contours:
cv2.drawContours(img, c, -1, (0, 0, 255), 1)

⑤輪郭の近似 作成中

cv2.imshow('img',resize(img))

結果

イメージ説明

中途半端な状態ではありますが、結果としてダメそうな気がしています。
どなたか実装ベースでご教授いただけないでしょうか。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

umyu

2018/06/06 17:07 編集

本題と関係ないのでこちらに、cv2.imreadの戻り値の画像はBGR形式なので、cv2.cvtColorでcv2.COLOR_RGB2GRAYを指定すると画素情報がおかしくなります。cv2.COLOR_BGR2GRAYとするか、cv2.imreadの引数にcv2.IMREAD_GRAYSCALEを追加してグレースケールとして読み込んでくださいな。
daodao

2018/06/07 15:35

なるほど、そういった戻り値になるのですね。勉強になります!
guest

回答の取得に失敗しました

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問