やりたいこと
ある画像の輪郭を抽出してその背景だけを透明化して中身を抜き出したいです!!!
実際に書いたコード
python
1import cv2 2 3# 画像を読み込む。 4# -1をつけることでアルファチャンネルもよんでくれるらしい 5img = cv2.imread(r"C:\Users\hirayama\Desktop\python_test\Python.png", -1) 6# アルファチャンネルだけ抜き出す 7mask = img[:, :, 3] 8# 0~255まであって0が透明らしい 9mask = 0 10# グレースケールに変換する。 11gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 12 13# 2値化する。 14thresh, binary = cv2.threshold(gray, 230, 255, cv2.THRESH_BINARY_INV) 15 16# 輪郭を抽出する。 17contours, hierarchy = cv2.findContours( 18 binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE 19) 20 21# すべての輪郭を描画 22cv2.drawContours(img, contours, -1, color=(0, 255, 0), thickness=2) 23 24# 保存する。 25cv2.imwrite(r"C:\Users\hirayama\Desktop\python_test\save_Python.png", img) 26 27# 表示 28cv2.imshow("img", img) 29cv2.waitKey(0) 30 31cv2.imshow("img", mask) 32cv2.waitKey(0)
実行結果
自分の考え
上記のコードは、ほとんど参考にさせていただいているので自分で書いたとは言えないのですが、とりあえず、すべての輪郭を抽出するのにグレースケール化し、二値化してから、drawContoursを行っています。
もしかしたら、これらの処理は背景透過にはいらないのかも?
そのご透明化するにはアルファチャンネルをいじらなければならないみたいなのですが、輪郭抽出した外側を配列で選択しなければならないのかなと思っています。
解決したいこと
まずは、輪郭の外側を透明化できるコードを教えてほしいです。
また、これらの内容をふまえて、コードのレビューをお願いします。
よろしくお願いします!!
回答1件