OpenCV/OpenCV 강좌
OpenCV Python kmeans 예제
webnautes
2024. 4. 10. 07:35
반응형
k-means 클러스터링 알고리즘을 구현한 kmeans 함수 예제입니다.
2024. 4. 10 최초시간
kmeans 함수는 k-means 클러스터링 알고리즘을 구현한 것으로, 주어진 데이터를 k개의 클러스터로 그룹화하는 데 사용됩니다. 이 함수는 데이터 포인트 사이의 유클리드 거리를 기반으로 각 데이터 포인트를 가장 가까운 클러스터 중심에 할당합니다. 클러스터의 수 k는 사용자가 지정해야 하며, 알고리즘은 클러스터의 중심을 반복적으로 업데이트하면서 데이터 포인트를 그룹화합니다.
import cv2 import numpy as np def cluster_colors(img, k): h, w, _ = img.shape # 이미지를 (픽셀 수, 채널 수) 형태로 변환합니다. img_flatten = img.reshape((-1, 3)) # 데이터 타입을 np.float32로 변환합니다. img_flatten = np.float32(img_flatten) # k-평균 알고리즘의 종료 기준을 정의한다 (반복 횟수와 원하는 정밀도) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.2) # k-평균 알고리즘을 실행한다 _, labels, centers = cv2.kmeans(img_flatten, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) # 클러스터의 중심 값을 uint8 타입으로 변환한다 centers = np.uint8(centers) # 각 픽셀을 해당하는 중심 색상으로 대체한다 clustered_img = centers[labels.flatten()] # 이미지의 크기를 원본으로 복원한다 clustered_img = clustered_img.reshape((h, w, 3)) return clustered_img img = cv2.imread('test.jpg') clustered_img = cluster_colors(img, k=4) img_result = cv2.hconcat([img, clustered_img]) cv2.imshow('Clustered Image', img_result) cv2.waitKey(0) cv2.destroyAllWindows() |
실행결과입니다. 왼쪽 이미지를 k값으로 지정한 4가지 색으로 표현하고 있습니다.
반응형