이미지에서 색상 추출하기

7233 단어 kmeansOpenCV-Python
객체 추출
말레이시아의 국기를 사용하다.색상의 비율을 눈으로 판단할 때는 빨간색, 흰색, 청색, 노란색 순으로 판단한다.

코드 이미지
이미지는 픽셀로 구성됩니다.그리고 픽셀마다 색상(RGB)의 정보가 있습니다.
다음은 말레이시아 국기의 일부분이다.픽셀 수는 50x50입니다.

이러한 픽셀의 색상은 RGB 공간에서 다음과 같습니다.

RGB 공간에서 kmeans라는 컬렉션 기법을 사용하여 색상의 비율을 내보냅니다.
코드
colorextract.py
import cv2
import matplotlib.colors as cs
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans

#set path to image
imgpath = 'malaysiaflag.png'
#set number of cluster for kmeans
clusterno = 3

#read image
img = cv2.imread(imgpath)
#convert bgr to rgb
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#reshape img array
n_img = np.reshape(img,(img.shape[0]*img.shape[1],3))

#use kmeans to find cluster of color
clt = KMeans(n_clusters=clusterno)
clt.fit(n_img)

#get unique value of labels in kmeans
labels = np.unique(clt.labels_)

#find the pixel numbers of each color that is set by cluster number
hist,_ = np.histogram(clt.labels_,bins=np.arange(len(labels)+1))

#declare list to hold color to be used in chart
colors = []

#declare list to hold hex color code for labeling in chart
hexlabels = []

#get the main color
for i in range(clt.cluster_centers_.shape[0]):
  colors.append(tuple(clt.cluster_centers_[i]/255))
  hexlabels.append(cs.to_hex(tuple(clt.cluster_centers_[i]/255)))

#create pie chart for color
plt.pie(hist,labels=hexlabels,colors=colors,autopct='%1.1f%%')
plt.axis('equal')
plt.show()
실행 결과
• 클러스터 수(clusterno)가 3으로 지정된 경우

• 클러스터 수(clusterno)가 4로 지정된 경우

좋은 웹페이지 즐겨찾기