こんばんはエンジニアの眠れない夜です。
ネットショップの商品画像などで白っぽい背景から商品画像だけを切り取りたい!という方に今回方法がおすすめです。
必要な関数をコピペするだけで後は関数に画像のパスを放り込めば対象の商品だけを切り取ってくれる関数を作りました(^^)
断片的な情報は検索するといろいろ見つかるのですが、これ!というものがなかったのでこのページを見つけられた方はラッキーですね。
一瞬で対象を切り取れます。それではやり方を見ていきましょう。
OpenCVで対象物と切り取るために必要な関数
この関数を貼り付けてください。
必要なライブはOpenCV,numpy,PIL(Pillow)どれも画像加工には定番のモジュールですね。
まだインストールしていない場合はpipでインストールしてください。
【Python】OpenCVで対象物と切り取る方法
get_crop_img('test.png')
たったこれだけです。
引数に画像のパスを指定するだけで、白っぽい背景の部分を無視して、対象だけを切り取ってくれます。
トリミング前
トリミング後
いい感じに対象物を切り取ることができましたね。
対象を抽出するためにOpenCVでやっていること
OpenCVにはCannyというエッジを検出する便利な関数があります。
Cannyにグレースケールにした状態の画像を放り込むとこんな感じになります。
あとは右側の検出したエッジ(ドット)の左右上下の座標を求めて切り取るだけです。
まとめ
背景が白っぽいものに対してはこれで対象物を抽出できるのでわざわざディープラーニングを使う必要はありません(・∀・)←使おうとしていたヒト(笑)
背景が白い時はこの関数を使ってサクッとやりたいことを実現できますね!
1点補足するなら、対象物が白基調だと背景との区別が難しく切れることがあります。(厳密には背景色と似たよな色の物体の場合)
画像の前処理とCropの引数をいじれば調整できると思います。
この辺は運用とニーズの問題なので個別で対応をお願いしますm(_ _)m
今回のプログラムの動作確認をしたいという方はこちらのColabから動かせます。
追記:PILを使った物体を切り出す方法
ここまで読んでいただいて大変恐縮なのですがPILを使ってもっとかんたんに物体を切り出す方法を見つけたので、上記の方法よりこちらをお試しいただく方が良いかもしれません。
ーーー
もっと複雑なものを検出したいという場合はkeras-yolo3を使った物体検出も検討してみてくださいね(^^)
[…] 【Python】OpenCVで白背景から対象物を切り取る方法 […]