You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
695 B
Python
25 lines
695 B
Python
1 year ago
|
import cv2
|
||
|
import numpy as np
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
image = cv2.imread('./Lenna.png').astype(np.float32) / 255.
|
||
|
image_lab = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)
|
||
|
|
||
|
data = image_lab.reshape((-1, 3))
|
||
|
|
||
|
num_classes = 8
|
||
|
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 50, 0.1)
|
||
|
_, labels, centers = cv2.kmeans(data, num_classes, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
|
||
|
|
||
|
segmented_lab = centers[labels.flatten()].reshape(image.shape)
|
||
|
segmented = cv2.cvtColor(segmented_lab, cv2.COLOR_Lab2RGB)
|
||
|
|
||
|
plt.subplot(121)
|
||
|
plt.axis('off')
|
||
|
plt.title('original')
|
||
|
plt.imshow(image[:,:,[2,1,0]])
|
||
|
plt.subplot(122)
|
||
|
plt.axis('off')
|
||
|
plt.title('segmented')
|
||
|
plt.imshow(segmented)
|
||
|
plt.show()
|