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

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

ただいまの
回答率

87.34%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,305

score 59

したいこと

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

コード

import cv2
import numpy as np

# 画像を読み込む。
img = cv2.imread(r"C:\Users\hirayama\Desktop\python_test\Python.png")

# グレースケールに変換する。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 2値化する。
thresh, binary = cv2.threshold(gray, 230, 255, cv2.THRESH_BINARY_INV)

# 輪郭を抽出する。
contours, hierarchy = cv2.findContours(
    binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
)

# マスクを作成する
mask = np.zeros_like(binary)

# 輪郭内部(透明化しない画素)を255で塗りつぶす。
for cnt in contours:
    cv2.drawContours(mask, contours, -1, color=255, thickness=-1)

# RGBAに変換する
rgba = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA)

# マスクをアルファチャンネルに設定する。
rgba[..., 3] = mask


# すべての輪郭を描画
#cv2.drawContours(img, contours, -1, color=(0, 255, 0), thickness=2)

# 保存する。
cv2.imwrite(r"C:\Users\hirayama\Desktop\python_test\rgba_Python.png", rgba)


# 表示
cv2.imshow("img", rgba)
cv2.waitKey(0)

実行結果

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

解決したいこと

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

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

追記

イメージ説明

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2019/11/02 02:57 編集

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

    キャンセル

  • tiitoi

    2019/11/02 02:59

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

    キャンセル

  • oinari03

    2019/11/02 07:56

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

    キャンセル

回答 1

check解決した方法

0

透過後の画像(teratail)

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

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

イメージ説明

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

よろしくお願いします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/02 01:38

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

    キャンセル

  • 2019/11/02 07:41 編集

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

    キャンセル

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

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る