質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

2965閲覧

初めてのopencvでの背景透過2

oinari03

総合スコア59

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2019/11/01 10:25

編集2019/11/01 17:04

したいこと

輪郭抽出をしてその外側を透明化して保存したい。

コード

python

1import cv2 2import numpy as np 3 4# 画像を読み込む。 5img = cv2.imread(r"C:\Users\hirayama\Desktop\python_test\Python.png") 6 7# グレースケールに変換する。 8gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 9 10# 2値化する。 11thresh, binary = cv2.threshold(gray, 230, 255, cv2.THRESH_BINARY_INV) 12 13# 輪郭を抽出する。 14contours, hierarchy = cv2.findContours( 15 binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE 16) 17 18# マスクを作成する 19mask = np.zeros_like(binary) 20 21# 輪郭内部(透明化しない画素)を255で塗りつぶす。 22for cnt in contours: 23 cv2.drawContours(mask, contours, -1, color=255, thickness=-1) 24 25# RGBAに変換する 26rgba = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA) 27 28# マスクをアルファチャンネルに設定する。 29rgba[..., 3] = mask 30 31 32# すべての輪郭を描画 33#cv2.drawContours(img, contours, -1, color=(0, 255, 0), thickness=2) 34 35# 保存する。 36cv2.imwrite(r"C:\Users\hirayama\Desktop\python_test\rgba_Python.png", rgba) 37 38 39# 表示 40cv2.imshow("img", rgba) 41cv2.waitKey(0) 42

実行結果

イメージ説明
このように普通の画像が出てしまいます。。

解決したいこと

こちらをもろパクリさせていただいているので自分のミスかもしれませんが、思うように行かないのが引っかかって夜も眠れません、

すみません。コードを勉強してる段階なのでミスや知識不足が目立ってしまいます。
皆様のレビューをみて勉強していきたいです。。

追記

イメージ説明

こちらはコードを実行されたときに表示された画像です。
この画像は、表示したとき、フォルダに保存したときは透明化されていないですl

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kapustin

2019/11/01 14:08

見事に透過pngが生成されていると思いますが、どの点が「思うように行かない」のでしょうか? したいことは上記の画像でできているように思います。
oinari03

2019/11/01 16:10

申し訳ありません!出来ていました!!
oinari03

2019/11/01 16:17

フォルダで見ると普通の画像が保存されていて透過されていないみたいです
tiitoi

2019/11/01 17:58 編集

使ってるビューアーの仕様ではないですか? データとしては透過されてますが、透過された部分の色をどう表示するかはビューアーを作った人の自由です。 白で表示するビューアーもあるし、黒で表示するビューアーもあります。
tiitoi

2019/11/01 17:59

それかラインでは透過画像はrgb画像に勝手に変換される仕様になってるとかですかね? どちらしてもラインの仕様なのでどうしようもないです。
oinari03

2019/11/01 22:56

了解です!PCのフォルダからも透過画像として分かりづらいのが難点ですがとても参考になりました!ありがとうございます!
guest

回答1

0

自己解決

透過後の画像(teratail)

イメージ説明
こちらは画像をクリックすると透過画像が表示されるかとおもいます。

同じ画像(lineで送った時のスクショ)

イメージ説明

わかりづらいかもですが、teratailで送った画像のみ透過されていて、lineで送っても、フォルダの画像を見ても、ましてや、実行の時に表示される画像までも透過された画像ではないです。

よろしくお願いします。

投稿2019/11/01 16:11

編集2019/11/01 16:36
oinari03

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oinari03

2019/11/01 16:38

これは、追記です。未だ解決しておらず原因がわからないです。。。。
Kapustin

2019/11/01 22:43 編集

tiitoiさんが指摘している通り、lineでは背景透過pngは表示できない仕様です。おそらく画像アップロード時に変換されてしまいます。 どうしてもlineで送りたければ、zip圧縮などして送ると画像自体のデータ形式は保持されます。 (ライン上の表示はzipファイルのアイコンになりますが) https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11160901271
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問