我有一個字母和不同顏色的形狀的圖像。我需要對它們執行kmeans聚類,然後提供兩個不同的圖像,一個只重新生成形狀,另一個只重新生成Letter信號。 這是一個示例原始圖像和我需要實現的。 Original Image顏色分割使用Kmeans,Opencv蟒蛇
Shape color regenerated 並且類似地,另一個只用白色R.
我已經成功地進行k均值聚類算法,如何訪問標籤和集羣IDX再生預期的效果?有人可以請示例代碼說明。這是代碼。提前致謝。
import numpy as np
import cv2
img = cv2.imread("/home/manohar/Outputs/Targets/m-0.PNG",1)
cv2.imshow("original",img)
Z = img.reshape((-1,3))
# convert to np.float32
Z = np.float32(Z)
# Here we are applying k-means clustering so that the pixels around a colour are consistent and gave same BGR/HSV values
# define criteria, number of clusters(K) and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
# We are going to cluster with k = 2, because the image will have just two colours ,a white background and the colour of the patch
K = 3
attempts=10
ret,label,center=cv2.kmeans(Z,K,None,criteria,attempts,cv2.KMEANS_PP_CENTERS)
# Now convert back into uint8
#now we have to access the labels to regenerate the clustered image
center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((img.shape))
#res2 is the result of the frame which has undergone k-means clustering
cv2.imshow("res2",res2)
cv2.waitKey()
cv2.destroyAllWindows()
謝謝您的回覆先生,但這不是我想達到的。當我傳遞任何帶有形狀和字母的圖像時,我只想重新生成兩個新圖像,一個只有形狀,另一個只有字母顏色。我該如何做這個先生?在C++中,我們使用cluster_idx,我如何在python中執行此操作? – Manohar
您的問題也被問及如何訪問中心和標籤。你能否澄清你的意思?如果我理解正確,你想要一個圖像與刪除檢測到的對象(就像在我的答案中已經解釋過的形狀變黑)*和*也只有提取的對象(字母)的圖像? – DarkCygnus
根據您的意見編輯我的答案 – DarkCygnus