【问题标题】:How can I change the color of kmeans clusters in image segmentation如何在图像分割中更改 kmeans 簇的颜色
【发布时间】:2022-01-25 00:13:13
【问题描述】:

我尝试使用 kmeans 聚类执行图像分割。

我想控制类的颜色。我该怎么做?

            # convert to np.float32
            Z = np.float32(Z)

            # define criteria, number of clusters(K) and apply kmeans()
            criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
            K = 2
            ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)

            # Now convert back into uint8, and make original image
            center = np.uint8(center)
            res = center[label.flatten()]
            res2 = res.reshape((img.shape))

            #cv2.imshow('res2',res2)
            #cv2.waitKey(0)
            #cv2.destroyAllWindows()

            Image.fromarray(res2).save(f + 'kmeans.png', "png", quality=100)     
kmean()

【问题讨论】:

    标签: python opencv image-segmentation


    【解决方案1】:

    我不知道你想用 2 个中心控制什么。
    如果你想得到二进制地图,你可以关注这里:

    # convert to np.float32
    Z = np.float32(Z)
    
    # define criteria, number of clusters(K) and apply kmeans()
    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
    K = 2
    ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
    
    # get the most popular color and specify it is black
    black_color = np.argmax(np.bincount(label.flatten()))
    
    # generate binary map with white color
    center = np.ones((K,1), dtype = 'uint8') * 255
    center[black_color] = [0]
    res = center[label.flatten()]
    res2 = res.reshape((image_text.shape[0], image_text.shape[1], 1))
    
    return res2
    

    您可以更改任何您想要的颜色,而不仅仅是白色和黑色。希望能帮到你

    【讨论】:

    • 我想控制二进制类的颜色,我不喜欢算法返回的两种输出颜色。
    • 解决了,谢谢
    猜你喜欢
    • 2020-02-11
    • 2016-04-29
    • 2019-01-30
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2016-09-11
    相关资源
    最近更新 更多