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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

613閲覧

出力画像の黒色が正しく表示されない問題について

rk2

総合スコア11

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/04 03:38

編集2019/05/04 05:49

パイソンで画像の編集を行い出力した画像の色が変になってしまいました.
具体的には,黒で出力した部分が一枚目のように少し灰色のようになってしまいます.プログラムで保存の前に画像を表示したときは黒色で表示されていました.
しかし,Windowsのデフォルトの編集ソフトやmatlabなどで開くと二枚目のように黒く表示されます.
ペイントで開いたときは灰色でした.
確認の為にデータ(数値)で見てもr,g,bでは(0,0,0)でした.
これは何が原因として考えられるのでしょうか?
分かる方いらっしゃいましたらご教授願います.

python

1import numpy as np 2import cv2 3from PIL import Image 4import matplotlib.pyplot as plt 5 6for number in range(1, 2): 7#複数の画像を読み込むためのループ 今回は一枚のみ 8 label_filenames = ("zu1.png") 9 10 #PILで読み込み 11 img = Image.open(label_filenames) 12 #インデックスカラーに変換 13 img = img.convert("P") 14 15 #カラーパレットにアクセスする。 16 palette = img.getpalette() 17 #リストの値は index=0 から順番に [R, G, B, R, G, B, ...]なので,扱いやすいように二次元配列に変形 18 palette = np.array(palette).reshape(-1, 3) 19 20 #黒と赤と緑のパレット番号を取得する 21 for palette_number in range(256): 22 if (palette[palette_number] == [0, 0, 0]).all(): 23 if palette_number == 0: 24 black_index = palette_number 25 else: 26 black_index = min(palette_number, black_index) 27 elif (palette[palette_number] == [255, 0, 0]).all(): 28 red_index = palette_number 29 elif (palette[palette_number] == [0, 255, 0]).all(): 30 green_index = palette_number 31 32 #カラーパレットの入れ替え 33 #1番目のパレット[0]に[0, 0, 0] クラス:無し を設定 34 if black_index != 0 35 tmp = palette[0] 36 palette[0] = palette[black_index] 37 palette[black_index] = tmp 38 39 #2番目のパレット[1]に[255, 0, 0] クラス:糸 を設定 40 tmp = palette[1] 41 palette[1] = palette[red_index] 42 palette[red_index] = tmp 43 44 #3番目のパレット[2]に[0, 255, 0] クラス:鉗子を設定 45 tmp = palette[2] 46 palette[2] = palette[green_index] 47 palette[green_index] = tmp 48 49 #パレット数の変更 50 N_COLOR = len(palette) - 253 # 適当な数に減らす 51 palette = palette[:N_COLOR] 52 print(palette) 53 #変更したパレットをリスト形式に変形し直し,再設定する 54 palette = palette.reshape(-1).tolist() 55 img.putpalette(palette) 56 57 #実データの更新 58 data = list(map(int, img.getdata())) 59 60 for i, v in enumerate(data): 61 if data[i] == red_index: 62 data[i] = 1 63 elif data[i] == green_index: 64 data[i] = 2 65 else: 66 data[i] = 0 67 #更新した実データを再設定 68 img.putdata(data) 69 70 img.show() 71 72 img.save("ret.png") 73

イメージ説明
イメージ説明

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

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

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

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

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

can110

2019/05/04 09:07

黒緑赤の単純画像で試してみましたが現象が再現しません(フォトでも黒く表示される) 元画像をどこかにアップロードし提示されると何らか検証できるかもしれません。
guest

回答1

0

自己解決

単純3色に減少できていなかったことが原因の様でした.
しっかりと減色した後では上記の様な現象は確認できていないです.

大変お騒がせ致しました.

投稿2019/05/04 10:02

rk2

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問