パイソンで画像の編集を行い出力した画像の色が変になってしまいました.
具体的には,黒で出力した部分が一枚目のように少し灰色のようになってしまいます.プログラムで保存の前に画像を表示したときは黒色で表示されていました.
しかし,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
黒緑赤の単純画像で試してみましたが現象が再現しません(フォトでも黒く表示される)
元画像をどこかにアップロードし提示されると何らか検証できるかもしれません。
回答1件
あなたの回答
tips
プレビュー