画像に使用されているRGBのピクセル数を確認したい
コード
画像に使われるRGBを確認したかったので、RGB数を棒グラフで表示するスクリプトを書いた。棒グラフはそのRGB色で、ピクセル数の多い順に表示。
import time from PIL import Image import pandas as pd import matplotlib import matplotlib.pyplot as plt #設定 first = 1 #上位何色からプロットするか num = 15 #上位何色までプロットするか # 画像読み込み img = Image.open("3.png") img_rgb = img.convert("RGB") width, height = img_rgb.size # RGB ピクセル数カウント num_rgb_px = {} for x1 in range(width): for y1 in range(height): r1,g1,b1 = img_rgb.getpixel((x1,y1)) key = "{:0=3}{:0=3}{:0=3}".format(r1,g1,b1) if key in num_rgb_px: num_rgb_px.update({key:num_rgb_px[key]+1}) else: num_rgb_px.update({key:1}) # Dataframe化 df = pd.DataFrame(list(num_rgb_px.items()),columns=['RGBkey','count']) df["R"] = None df["G"] = None df["B"] = None for index, item in df.iterrows(): r1 = item["RGBkey"][0:3] g1 = item["RGBkey"][3:6] b1 = item["RGBkey"][6:9] df.at[index,"R"] = r1 df.at[index,"G"] = g1 df.at[index,"B"] = b1 #ピクセル数順にソート df_s = df.sort_values("count",ascending=False) # プロットの為の整形 a=df_s[first:num]["count"] c=df_s[first:num][["R","G","B"]].values color_list=[] for row in c: color_list.append([int(num)/255 for num in row]) #プロット plt.figure() a.plot(kind="bar",figsize=(10,5) ,color=color_list ,width=1) plt.show()
結果
入力した画像
得られた結果
※x軸ラベルは、RGB値(R=255,G=111,B=0の場合、"255111000")。Y軸はピクセル数。