概要
- 画像ファイル(VGAサイズ)を40ピクセル毎にRGB値を取得
- 画像内で重複している色は複数表示しない
- グラフにRGBの色画像を表示
- 色画像の横にRGB値を表示
- CSVファイルにRGB値を書き込み
コメント
- 画像ファイルの特定の色を変更したい理由で、まずは画像内のRGB値確認のために作成してみた
- python勉強中で各種変換やループなど簡単な方法でトライ、もっといい方法があるのかも
- matplotlibのグラフ表示はサンプルコードをカスタマイズ
- VGA画像サイズで色抽出からグラフ出力まで22秒程度(MacBookPro Core i5)
- ラズパイでも動作可能なはず
- 表示したRGB色画像は全部確認できていないので間違っていたらすみません
- 使ったツールバージョンは以下
- MacOS Catalina / python3.5.6 / Opencv3.4.2 / VS code1.38.1
読み込み画像
RGB画像出力イメージ
CSVファイル出力イメージ
ファイル構成
- color_detect.py : 画像ファイルRGB値取得/出力処理ソースファイル(下のソースコード)
import cv2
import numpy as np
import matplotlib.pyplot as plt
color_list = []
list_cnt = 0
same_color = False
def draw_colors(colors):
writeFile = open("color_rgb.csv", 'w')
rows = np.ceil(len(colors) / 10)
fig = plt.figure(figsize=(10, 10))
fig.suptitle("Photo RGB Colors")
for i, color in enumerate(colors, 1):
img = color.reshape(1, 1, 3)
img_rgb = img[:,:,::-1]
blue_str = format(img_rgb[0, 0, 2],'02x')
green_str = format(img_rgb[0, 0, 1],'02x')
red_str = format(img_rgb[0, 0, 0],'02x')
rgb_str=red_str+green_str+blue_str
writeFile.write(rgb_str+"\n")
ax = fig.add_subplot(rows, 10, i)
ax.text(1.8, 0.2, rgb_str, fontsize=7,ha="center",color="black")
ax.imshow(img_rgb)
ax.set_axis_off()
writeFile.close()
plt.show()
img = cv2.imread("cat_face.png",cv2.IMREAD_COLOR)
height, width, channels = img.shape[:3]
for h in range(0, height,40):
for w in range(0,width,40):
pixelValue = img[h, w]
for i in range(0,list_cnt,1):
if np.allclose(color_list[i], pixelValue) == True:
same_color = True
break
if same_color == False:
color_list.append(pixelValue)
list_cnt += 1
print(".", end="")
same_color = False
print("\n")
print("Color Type Cnt : " + str(list_cnt))
draw_colors(color_list)
color_list.clear()
print("Exit Program")