Pythonでフォルダにある複数の画像を色で分類する方法
Pythonでフォルダにある複数の画像を赤、緑、青の3色とその他に分類してから、フォルダに保存する方法を紹介します。
目次
・分類する前の画像
・分類先のフォルダを作成するプログラム
・赤緑青の3色とその他に分類するプログラム
・分類した各フォルダの中身
分類する前の画像
画像は自分のスマホで撮った写真とぱくたそからダウンロードした画像を使っています。

分類先のフォルダを作成するプログラム
1 2 3 4 5 6 7 8 |
import os os.mkdir("color_sepa")#color_sepaフォルダを作成 f_name=["red","green","blue","other"] for name in f_name:#color_sepaフォルダにred,green,blue,otherのフォルダを作成 os.mkdir("color_sepa/" + name) |
プログラムを実行して、フォルダが作成された様子がこちら↓

赤緑青の3色とその他に分類するプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
import cv2 import glob #フォルダから複数の画像を読み込み img_data=glob.glob("pic_images/*.jpg") name=1#保存する画像名前 for i in range(len(img_data)):#フォルダに入っている画像の枚数繰り返す print(i+1,"枚目-----------------") img=cv2.imread(img_data[i])#画像データの読み込み img_show=cv2.resize(img,(500,300))#表示するために画像を小さくする cv2.imshow("img",img_show)#表示 cv2.waitKey(0) #画像の色を数値で確認 r = int(img.T[2].flatten().mean())#赤色 g = int(img.T[1].flatten().mean())#緑色 b = int(img.T[0].flatten().mean())#青色 print("Red:" , r) print("Green:" , g) print("Blue:" ,b) #r,g,bそれぞれの値の差を求める d1 = abs(r - g)#赤色の値を軸に緑色、青色の値を引く、軸にする色は何色でもいい d2 = abs(r - b)# d3 = abs(g - b)#軸にした色以外の差を求める print("d1,d2,d3=",d1,d2,d3)#差の表示 #r,g,bそれぞれの値の差が25くらいの場合は赤、緑、青で分類するのが難しいので、その他のotherフォルダに保存 if d1 <= 25 and d2 <= 25 and d3 <= 25: print("other")#保存するフォルダ名を表示 cv2.imwrite("color_sepa/other/"+str(name)+".png",img)#保存 name+=1#保存名前 continue#その他に分類したら、下の処理をさせないのでcontinue #赤、緑、青に分類できる画像の処理 else: rgb_value=[r,g,b]#r,g,bの値を格納 folders=["red","green","blue"]#フォルダ名を格納 #r,g,bの値を降順(大きい順)に並び替えを行うのと同時に、フォルダ名も並び替える for i in range(len(rgb_value)-1): for j in range(i+1,len(rgb_value)): if rgb_value[i] < rgb_value[j]: re=rgb_value[i] rgb_value[i]=rgb_value[j] rgb_value[j]=re re_f=folders[i]#フォルダ名前の並び替え folders[i]=folders[j] folders[j]=re_f #並び替えて先頭にきたフォルダ名に画像を保存する print(folders[0])#保存するフォルダ名を表示 save_name="color_sepa/"+folders[0]+"/"+str(name)+".png" cv2.imwrite(save_name,img)#保存 name+=1#保存名前 |
このプログラムを実行して、複数の画像を分類した様子がこちら↓

分類した各フォルダの中身
redフォルダ

greenフォルダ

blueフォルダ

otherフォルダ
