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가지 색으로 표현하고 있습니다. 

 




반응형