%matplotlib inline
#curlで画像を取得しています
!curl -s -o test.jpeg https://cdn.apollon.ai/media/notebox/blob_uANsGUx
!pip install japanize-matplotlib --quiet
import matplotlib.pyplot as plt
import japanize_matplotlib
import cv2
import numpy as np
import os
#取得した画素を一列に並べる
def make_rect(bgrs,num):
img=[[bgrs[0] for ii in range(num)] for i in range(num)]
for ffi in range(1,len(bgrs)):
tem=[[bgrs[ffi] for ii in range(num)] for i in range(num)]
img=np.hstack([tem,img])
return np.array(img,np.uint8)
#kmean法でクラスタリング、各クラスの重心の画素を表示
def make_kmean(img):
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
colors= img.reshape(-1, 3).astype(np.float32)
ret,label,center=cv2.kmeans(colors,4,None,criteria,10,cv2.KMEANS_PP_CENTERS)
os.remove("test.jpeg")
plt.title("入力画像")
plt.imshow(img[:,:,::-1])
plt.show()
plt.title("出力画像")
plt.imshow(make_rect(center,50)[:,:,::-1])
#表示
plt.show()
make_kmean(cv2.imread("test.jpeg"))