BLOG

 

235日のセブIT留学  成長日記「Pythonで画像解析_色分け!⑤」 ( 58/235 days )

04 9月 2018, Posted by keisuke in IT留学, Python

こんばんわ!Keisukeです!

以前取り扱った, 画像の色分けを複数の画像に対応させたいと思います!

ディレクトリ位置

irowake.py

images ※画像ファイル

-A.jpg

-B.jpg

-C.jpg

-D.jpg

-E.jpg

以下コード

**************************

import cv2

import numpy as np

from matplotlib import pyplot as plt

import os

def sum(data):

sum = 0

for i in range(len(data)):

sum = sum + data[i]

return sum

def mean(data):

sum_ave = sum(data)

mean = sum_ave / len(data)

return mean

def distribute(data_r,data_g,data_b): # distribute(–R–,–G–,–B–)

print(“画像の主要な色 : ”)

if(data_r > data_g and data_r > data_b):

print(“赤色”)

if(data_g > data_r and data_g > data_b):

print(“緑色”)

if(data_b > data_g and data_b > data_r):

print(“青色”)

if(data_b == data_g and data_b > data_r):

print(“水色”)

if(data_r == data_b and data_r > data_g):

print(“紫色”)

if(data_g == data_r and data_g > data_b):

print(“黄色”)

if(data_r == data_g and data_r == data_b):

print(“灰色”)

if __name__ == “__main__”:

# 画像単体読み込み

#img = cv2.imread(‘input.png’)

# 画像読み込み

# ——————————————————————————–#

# 画像複数読み込み

img_dir = os.path.abspath(os.path.dirname(__file__)) + ‘/images/’

files = os.listdir(img_dir)

print(“解析画像数”,len(files))

 

for file in files:

if file == ‘.DS_Store’ :

continue

print(file)

print(“———–解析開始———–“)

for file in files:

if file == ‘.DS_Store’ :

continue

comparing_img_path = img_dir + file

print(“++++++++++++++++++++++++++++++++++++++++++++++++++++++++++”)

print(“解析画像”,file)

img = cv2.imread(comparing_img_path)

print(“画素 : “,len(img))

img_r = []

img_g = []

img_b = []

for rgb in range(len(img[0][0])):

for y in range(len(img)):

for x in range(len(img[y])):

if(rgb is 0):

img_b.append(img[y][x][rgb])

if(rgb is 1):

img_g.append(img[y][x][rgb])

if(rgb is 2):

img_r.append(img[y][x][rgb])

# ——————————————————————————–#

# ヒスとグラムに変換 0~256

# ——————————————————————————–#

 

hist_r = []

hist_g = []

hist_b = []

hist_k = []

for count_img in range(256):

add_r = 0

add_g = 0

add_b = 0

add_k = 0

#print(count_img)

for size_img in range(len(img_r)):

if(count_img == img_r[size_img]):

add_r = add_r + 1

add_k = add_k + 1

if(count_img == img_g[size_img]):

add_g = add_g + 1

add_k = add_k + 1

if(count_img == img_b[size_img]):

add_b = add_b + 1

add_k = add_k + 1

hist_r.append(add_r)

hist_g.append(add_g)

hist_b.append(add_b)

hist_k.append(add_k)

 

# 方針4 画素値の合計 ※ヒストグラム未使用

# ——————————————————————————–#

print(“———-方針4———-“)

sum_r = sum(img_r)

sum_g = sum(img_g)

sum_b = sum(img_b)

ave_r = round(sum_r/len(img_r))

ave_g = round(sum_g/len(img_g))

ave_b = round(sum_b/len(img_b))

print(“*************************************************”)

print(“ave_R : “,ave_r)

print(“ave_G : “,ave_g)

print(“ave_B : “,ave_b)

print(“*************************************************”)

distribute(ave_r,ave_g,ave_b)

# ——————————————————————————–#

 

# 方針5 ヒストグラムを16分割し比較

# ——————————————————————————–#

print(“———-方針5———-“)

hist_r_split = []

hist_g_split = []

hist_b_split = []

hist_r_max = 0

hist_g_max = 0

hist_b_max = 0

hist_r_max_range = -1

hist_g_max_range = -1

hist_b_max_range = -1

for i in range(16):

hist_r_split.append(sum(hist_r[(i*16):((i*16)+16)]))

if(hist_r_split[i] > hist_r_max):

hist_r_max = hist_r_split[i]

hist_r_max_range = i

hist_g_split.append(sum(hist_g[(i*16):((i*16)+16)]))

if(hist_g_split[i] > hist_g_max):

hist_g_max = hist_g_split[i]

hist_g_max_range = i

hist_b_split.append(sum(hist_b[(i*16):((i*16)+16)]))

if(hist_b_split[i] > hist_b_max):

hist_b_max = hist_b_split[i]

hist_b_max_range = i

 

print(“*************************************************”)

print(“R : “,hist_r_max,”range_R : “,hist_r_max_range)

print(“G : “,hist_g_max,”range_G : “,hist_g_max_range)

print(“B : “,hist_b_max,”range_B : “,hist_b_max_range)

print(“*************************************************”)

distribute((hist_r_max_range*hist_r_max),(hist_g_max_range*hist_g_max),(hist_b_max_range*hist_b_max))

# ——————————————————————————–#

print(“++++++++++++++++++++++++++++++++++++++++++++++++++++++++++”)

print(“———–解析終了———–“)

# グラフ表示

# ——————————————————————————–#

 

#plt.plot(hist_r,color = ‘r’)

#plt.plot(hist_g,color = ‘g’)

#plt.plot(hist_b,color = ‘b’)

#plt.plot(hist_k,color = ‘k’)

#plt.show()

 

# ——————————————————————————–#

 

**************************

実行結果

解析画像数 5

B.jpeg

G.jpg

hqdefault.jpg

input.png

R.jpeg

———–解析開始———–

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

解析画像 B.jpeg

画素 :  220

———-方針4———-

*************************************************

ave_R :  21.0

ave_G :  88.0

ave_B :  219.0

*************************************************

画像の主要な色 :

青色

———-方針5———-

*************************************************

R :  48400 range_R :  1

G :  48396 range_G :  5

B :  48397 range_B :  13

*************************************************

画像の主要な色 :

青色

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

解析画像 G.jpg

画素 :  225

———-方針4———-

*************************************************

ave_R :  18.0

ave_G :  102.0

ave_B :  50.0

*************************************************

画像の主要な色 :

緑色

———-方針5———-

*************************************************

R :  41078 range_R :  1

G :  48314 range_G :  6

B :  39313 range_B :  3

*************************************************

画像の主要な色 :

緑色

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

解析画像 hqdefault.jpg

画素 :  360

———-方針4———-

*************************************************

ave_R :  133.0

ave_G :  98.0

ave_B :  86.0

*************************************************

画像の主要な色 :

赤色

———-方針5———-

*************************************************

R :  38991 range_R :  15

G :  26942 range_G :  3

B :  31163 range_B :  2

*************************************************

画像の主要な色 :

赤色

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

解析画像 input.png

画素 :  256

———-方針4———-

*************************************************

ave_R :  180.0

ave_G :  99.0

ave_B :  106.0

*************************************************

画像の主要な色 :

赤色

———-方針5———-

*************************************************

R :  11827 range_R :  13

G :  7365 range_G :  8

B :  12053 range_B :  5

*************************************************

画像の主要な色 :

赤色

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

解析画像 R.jpeg

画素 :  220

———-方針4———-

*************************************************

ave_R :  254.0

ave_G :  0.0

ave_B :  0.0

*************************************************

画像の主要な色 :

赤色

———-方針5———-

*************************************************

R :  48400 range_R :  15

G :  48400 range_G :  0

B :  48400 range_B :  0

*************************************************

画像の主要な色 :

赤色

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

———–解析終了———–

[今日の達成]

・複数の画像を同時に処理できた!

[今日の未消化]

・色分けしてファイルに保存する

Post a comment