0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】対象物の画素値RGBの平均値を計算する

Posted at

#1. 概要

今回紹介するのは、対象物の画素値RGBの平均値をcsvファイルに出力する処理です。
apple_introduction.jpg

りんごなど、対象物の画像の画素値の平均を求めたい!
という時に使用できます。この処理を構築した経緯としては、以前私がQiitaに投稿した記事にあります。↓
[【Python】サポートベクタマシン(SVM)を使って画素値からりんごと梨を分類][0]
[0]:https://qiita.com/ZESSU/items/3083ce23e0405565765d
この記事で取り上げた手法の前処理、「りんごと梨の画像それぞれのRGB画素値の平均値の取得」を行うために本処理を使用しています。

本処理をするにあたって必要な情報は対象物が映っている画像だけあればOKです。ただし、背景が入っていると正しく計算できないので、ペイントなどのアプリを使って下図のようにきれいに対象物だけをトリミングしておきます。
apple_image.jpg

#2. 環境
画像処理でopenCV、そしてデータフレームとしてpandasを使用するので事前にこれらのライブラリのインストールをおねがいします。

pip install opencv-python
pip install pandas

#3. コード
コードはこちらになります。注意点としてはopenCVを使用するので、出力がRGBではなく、BGRの順番になります。

bgr_csv.py
import cv2
import numpy as np
import pandas as pd

idir = 'input/'
odir = 'output/'
fname='apple'
num_photo=10
bgr = np.zeros((num_photo,3))

for k in range(num_photo):

    img = cv2.imread(idir + fname + '_' + str(k+1) + '.jpg')  #1番からスタート
    print(idir + fname + '_' + str(k+1) + '.jpg')
    h, w, c = img.shape #height, width, channnel

    #初期化
    l=0
    b_ave=0; g_ave=0; r_ave=0

    for i in range(h):
        for j in range(w):
            #画素値[0,0,0](Black)を除外してピクセルの和とbgrの画素値の合計を計算する
            if(img[i,j,0] != 0 or img[i,j,1] != 0 or img[i,j,2] != 0 ):
                l+=1    #対象となるピクセル数を計算する
                #対象となるピクセルの画素値の和を計算する
                b_ave=b_ave+img[i,j,0]
                g_ave=g_ave+img[i,j,1]
                r_ave=r_ave+img[i,j,2]

    #画素値合計をピクセル数で除することでRGBの画素値の平均値を求める
    b_ave=b_ave/l
    g_ave=g_ave/l
    r_ave=r_ave/l

    bgr[k]=np.array([b_ave, g_ave, r_ave])

df = pd.DataFrame(bgr, columns=['blue', 'green', 'red'])    #opencvの並び準BGRに合わせる
df.to_csv(odir + fname + '.csv')

例えば、、、

fname='apple'
num_photo=1

とした場合は「input/apple_1.jpg」のファイル1つだけの各画素値の平均値を「output/apple.csv」として出力します。

#4. 結果

10個のりんごの画像を処理したら下のように、10個分のBGR画像の平均値を取得したapple.csvファイルが出力されます。

apple.csv
,blue,green,red
0,39.88469583593901,28.743374377331637,137.23369201906283
1,83.72563703792319,79.59471228615863,164.77884914463453
2,66.8231805177587,74.52501570023027,141.8854929872305
3,55.2837418388098,45.28968211495237,148.4160869099861
4,37.59397951454073,49.82323881039423,137.30237460066527
5,53.68868757437335,50.963264366051206,142.6121454070861
6,51.277953772145956,64.07145371348116,152.98116860260473
7,50.47702848900108,48.37151099891814,124.46714749368914
8,40.35442093843233,52.0682126390019,137.8299091402224
9,48.18758094199441,55.87655919841865,145.6361529548088

概要にも記載の通り、このコードで出力したりんごと梨のcsvファイルを使って↓
[【Python】サポートベクタマシン(SVM)を使って画素値からりんごと梨を分類][1]
[1]:https://qiita.com/ZESSU/items/3083ce23e0405565765d
を行っています。こちらの記事も是非見てみてくださいね!

0
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?