• OpenCV自学笔记二十五:K均值聚类


    OpenCV中,K均值聚类(K-means Clustering)算法的实现包含在ml模块中。K均值聚类是一种无监督学习算法,用于将数据集划分为K个类别。

    K均值聚类的原理很简单,它首先随机选择K个初始聚类中心,然后迭代地执行以下步骤:将每个数据点分配给离它最近的聚类中心所属的类别,并更新聚类中心为属于该类别的数据点的均值。重复此过程直到聚类中心不再发生变化或达到预定的迭代次数。

    在OpenCV中,K均值聚类的函数为`cv.ml.Kmeans_create()`。下面是一个使用K均值聚类算法进行图像颜色量化的示例代码:

    1. import cv2 as cv
    2. import numpy as np
    3. # 加载图像
    4. image = cv.imread('input.jpg')
    5. # 将图像转换为一维数组
    6. data = image.reshape(-1, 3).astype(np.float32)
    7. # 创建K均值聚类对象
    8. kmeans = cv.ml.Kmeans_create()
    9. # 设置聚类参数
    10. kmeans.setFlags(cv.ml.KMEANS_RANDOM_CENTERS)
    11. criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 10, 1.0)
    12. kmeans.setTermCriteria(criteria)
    13. kmeans.setK(16)
    14. # 进行聚类
    15. _, labels, centers = kmeans.train(data)
    16. # 将每个像素的颜色替换为其所属聚类中心的颜色
    17. quantized_image = centers[labels.flatten()].reshape(image.shape).astype(np.uint8)
    18. # 显示结果
    19. cv.imshow('Original Image', image)
    20. cv.imshow('Quantized Image', quantized_image)
    21. cv.waitKey(0)
    22. cv.destroyAllWindows()

    在上述示例中,我们首先加载了一个图像,并将其转换为一维数组形式,也就是将每个像素的RGB值合并到一个数组中。然后,创建了一个K均值聚类对象。通过`setFlags()`函数设置随机初始化聚类中心的方式。使用`setTermCriteria()`函数设置迭代停止条件,包括最大迭代次数和误差阈值。调用`setK()`函数设置要得到的聚类数量。接下来,使用`train()`函数进行聚类,得到每个数据点对应的聚类标签和聚类中心。然后,根据聚类标签,将原始图像中的每个像素的颜色替换为相应聚类中心的颜色。最后,显示原始图像和量化后的图像。

    运行以上代码,将展示原始图像和经过K均值聚类算法量化后的图像。其中,`setK()`函数设置了16个聚类,即将图像的颜色量化为16种。

    K均值聚类算法还可以用于其他领域,如图像分割、异常检测等。根据具体问题的要求,可以调整聚类的数量和参数设置。

  • 相关阅读:
    台式机卡死救机心情点滴记录
    【Redis】Hash 哈希内部编码方式
    12v24v60v高校同步降压转换芯片推荐
    灰色和测试环境打包串台
    Spring Security 学习笔记
    怎样成为优秀的后端工程师
    【图像处理】获取图片像素点
    图的应用4.0-----关键路径(AOE网)
    【SA8295P 源码分析 (二)】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析
    异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)
  • 原文地址:https://blog.csdn.net/m0_71721954/article/details/133174715