【问题标题】:Clustering algorithm for detecting colored objects检测有色物体的聚类算法
【发布时间】:2014-09-15 13:32:48
【问题描述】:

是否可以使用任何聚类算法,使用opencv根据对象的颜色将对象分为2个簇,以便能够计算2种不同颜色的数量(所有对象的颜色并不完全相同,但它们相似)图像中的对象?

到目前为止,以下代码是我实现的 def getThresholdsKmeans(imageFile): im = cv2.imread(imageFile); im = ndimage.gaussian_filter(im,10) gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY); gray = gray.ravel(); gray = np.float32(gray); criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,10,1); flags = cv2.KMEANS_RANDOM_CENTERS;
compactness,labels,centers = cv2.kmeans(gray,3,criteria,10,0) print centers return centers

我使用函数返回的值并对图像进行阈值处理。

【问题讨论】:

  • 附加提示:我建议在 HSV/HSL 颜色空间(色调通道)中进行聚类
  • 看看图像分割,而不是聚类。
  • 也许给我们看一张图片,以便我们更好地了解您拥有什么以及您想要什么?如果您提供更好的信息,您得到的解决方案可能会更好。
  • i.stack.imgur.com/hz0qm.jpg。此示例图像只是其中一种。由于不同图像的背景、蓝色和棕色颜色不同,我正在尝试对图像进行预处理以获得蓝色和棕色的阈值。目前我可以获得这些值,但有时 kmeans 不会产生准确的结果。

标签: opencv cluster-analysis image-segmentation


【解决方案1】:

您可以使用cv::kmeans
对于每个像素,提取三个颜色值并将它们插入到data 矩阵中。
这会产生一个矩阵,其中 输入图像中的像素数 行和三列。
将此矩阵用作data 参数。参数 K 将是 2 或 3,具体取决于您的定义(两个彩色对象 + 背景颜色?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多