【Python】 대상물의 화소값 RGB의 평균값을 계산한다
1. 개요
이번에 소개하는 것은, 대상물의 화소치 RGB의 평균치를 csv 파일에 출력하는 처리입니다.
사과 등, 대상물의 화상의 화소치의 평균을 구하고 싶다!
라고 할 때 사용할 수 있습니다. 이 처리를 구축한 경위로서는, 이전에 제가 Qiita에 투고한 기사에 있습니다. ↓
【Python】서포트 벡터 머신(SVM)을 사용해 화소치로부터 사과 배를 분류
이 기사에서 다룬 기법의 전처리, 「사과와 배의 화상 각각의 RGB 화소치의 평균치의 취득」을 실시하기 위해서 본 처리를 사용하고 있습니다.
본 처리를 하는데 있어서 필요한 정보는 대상물이 비치고 있는 화상만 있으면 OK입니다. 그러나 배경이 포함되어 있으면 올바르게 계산할 수 없으므로 페인트 등의 앱을 사용하여 아래 그림과 같이 깨끗하게 대상물만을 잘라 둡니다.
2. 환경
이미지 처리에서 openCV, 그리고 데이터 프레임으로 pandas를 사용하기 때문에 사전에 이러한 라이브러리의 설치를 부탁드립니다.
pip install opencv-python
pip install pandas
3. 코드
코드는 여기입니다. 주의점으로는 openCV를 사용하므로 출력이 RGB가 아니라 BGR의 순서가 됩니다.
bgr_csv.pyimport 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"의 파일 하나만의 각 픽셀 값의 평균값을 "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)을 사용해 화소치로부터 사과 배를 분류
하고 있습니다. 이쪽의 기사도 꼭 봐 주세요!
Reference
이 문제에 관하여(【Python】 대상물의 화소값 RGB의 평균값을 계산한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ZESSU/items/40b8bb2cd179371df6ac
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이미지 처리에서 openCV, 그리고 데이터 프레임으로 pandas를 사용하기 때문에 사전에 이러한 라이브러리의 설치를 부탁드립니다.
pip install opencv-python
pip install pandas
3. 코드
코드는 여기입니다. 주의점으로는 openCV를 사용하므로 출력이 RGB가 아니라 BGR의 순서가 됩니다.
bgr_csv.pyimport 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"의 파일 하나만의 각 픽셀 값의 평균값을 "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)을 사용해 화소치로부터 사과 배를 분류
하고 있습니다. 이쪽의 기사도 꼭 봐 주세요!
Reference
이 문제에 관하여(【Python】 대상물의 화소값 RGB의 평균값을 계산한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ZESSU/items/40b8bb2cd179371df6ac
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
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)을 사용해 화소치로부터 사과 배를 분류
하고 있습니다. 이쪽의 기사도 꼭 봐 주세요!
Reference
이 문제에 관하여(【Python】 대상물의 화소값 RGB의 평균값을 계산한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ZESSU/items/40b8bb2cd179371df6ac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)