OpenCV的k - means聚类

目标

  • 学习使用cv2.kmeans()数据聚类函数OpenCV

理解参数

输入参数

  1. 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列。

  2. nclusters(K):数量的集群需要结束

  3. 标准:这是迭代终止准则。 当这个标准是满足,算法迭代停止。 实际上,它应该是一个元组的三个参数。 他们是( type,max_iter,epsilon):

    • 3. a -type 的终止条件:它有三个标志如下:

      cv2.TERM_CRITERIA_EPS——停止算法迭代如果指定的精度,ε是达到了。cv2.TERM_CRITERIA_MAX_ITER——停止指定数量的迭代算法后,max_itercv2。 TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER——任何上述条件时停止迭代。

    • 3. b - max_iter整数指定最大迭代数。
    • 3. c -epsilon 所需精度
  4. 尝试:标记来指定执行的次数算法使用不同的初始标签。 算法返回标签,产生最佳的密实度。 这个密实度是作为输出返回。

  5. 旗帜:这个标志用于指定初始中心。 通常用于这两个标记:cv2.KMEANS_PP_CENTERScv2.KMEANS_RANDOM_CENTERS

输出参数

  1. 密实度:这是每一个点的距离的平方和相应的中心。
  2. 标签:这是标签阵列,其中每个元素标记1,另一个为0
  3. 中心:这是一系列的集群中心。

以下是示例代码:

第一个基本语法 与 一维数据聚类

# -*- coding:utf-8 -*-
__author__ = 'FontTian'
__Date__ = '2017/5/13'import numpy as np
import cv2
from matplotlib import pyplot as pltx = np.random.randint(25,100,25)
y = np.random.randint(175,255,25)
z = np.hstack((x,y))
z = z.reshape((50,1))
z = np.float32(z)
plt.hist(z,256,[0,256]),plt.show()# Define criteria = ( type, max_iter = 10 , epsilon = 1.0 )
#  这是迭代终止准则:type(A = TERM_CRITERIA_EPS 按照精度终止,B = TERM_CRITERIA_MAX_ITER,按照迭代次数终止,A+B 满足任一条件时终止)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)# Set flags (Just to avoid line break in the code)
#  用以指定初始中心
flags = cv2.KMEANS_RANDOM_CENTERS# Apply KMeans
'''密实度 :这是每一个点的距离的平方和相应的中心。标签 :这是标签阵列,其中每个元素标记0,1.....中心 :这是一系列的集群中心。
'''
compactness,labels,centers = cv2.kmeans(z,2,None,criteria,10,flags)
A = z[labels==0]
B = z[labels==1]
# Now plot 'A' in red, 'B' in blue, 'centers' in yellow
plt.hist(A,256,[0,256],color = 'r')
plt.hist(B,256,[0,256],color = 'b')
plt.hist(centers,32,[0,256],color = 'y')
plt.show()

第二个:多维数据聚类

# -*- coding:utf-8 -*-
__author__ = 'FontTian'
__Date__ = '2017/5/13'import numpy as np
import cv2
from matplotlib import pyplot as pltX = np.random.randint(25,50,(25,2))
Y = np.random.randint(60,85,(25,2))
Z = np.vstack((X,Y))# convert to np.float32
Z = np.float32(Z)# define criteria and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
ret,label,center=cv2.kmeans(Z,2,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)# Now separate the data, Note the flatten()
A = Z[label.ravel()==0]
B = Z[label.ravel()==1]# Plot the data
plt.scatter(A[:,0],A[:,1])
plt.scatter(B[:,0],B[:,1],c = 'r')
plt.scatter(center[:,0],center[:,1],s = 80,c = 'y', marker = 's')
plt.xlabel('Height'),plt.ylabel('Weight')
plt.show()

第三个,图片的颜色量化

# -*- coding:utf-8 -*-
__author__ = 'FontTian'
__Date__ = '2017/5/13'
import numpy as np
import cv2img = cv2.imread('spaceship.jpg')
Z = img.reshape((-1,3))
# convert to np.float32
Z = np.float32(Z)
j =0
# define criteria, number of clusters(K) and apply kmeans()
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
Klist = [2,4,6,8,10]
for i in Klist:ret,label,center=cv2.kmeans(Z,i,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)j +=2# Now convert back into uint8, and make original imagecenter = np.uint8(center)res = center[label.flatten()]res2 = res.reshape((img.shape))cv2.imshow(str(("spaceship K=",i)), res2)cv2.waitKey(0)
cv2.imshow('quondam image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

下面是我使用的示例图片:

OpenCV的k - means聚类 -对图片进行颜色量化相关推荐

  1. Python OpenCV应用K均值聚类进行颜色量化

    Python OpenCV应用K均值聚类进行颜色量化 1. 效果图 2. 颜色量化是什么? 3. MiniBatchKMeans & KMeans 4. 源码 参考 在这篇博客文章中,我将向您 ...

  2. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  3. k means聚类算法_K-Means 聚类算法 20210108

    说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...

  4. c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现

    对于比 较大的类别,如遥感影像中以像素数目表示的较大 的类别,式(1)可以近似表示为 仃222 n2丁 在遥感分类应用中,一般采用试探性的方法确定 选择训练样本数量,选取规则是每个类别需要的样本 数量 ...

  5. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  6. Python,OpenCV中的K均值聚类——K-Means Cluster

    Python,OpenCV中的K均值聚类 1. 效果图 2. 原理 2.1 什么是K均值聚类? 2.2 K均值聚类过程 2.3 cv2.kmeans(z, 2, None, criteria, 10, ...

  7. 机器学习(十四):K均值聚类(kmeans)

    k均值聚类方法是一种无监督机器学习技术,用于识别数据集中的数据对象集群.有许多不同类型的聚类方法,但k -means是最古老和最平易近人的方法之一.这些特性使得在 Python 中实现k -means ...

  8. matlab调用kmeans_使用 K 均值聚类实现基于颜色的分割

    步骤 1:读取图像 在 hestain.png 中读取,这是一个带有苏木精和曙红染色组织 (H&E) 的图像.这种染色方法有助于病理学家区分不同组织类型. he = imread('hesta ...

  9. Kmeans K均值聚类,OpenCV实现

    Clustering 聚类 kmeans  k均值聚类 Finds centers of clusters and groups input samples around the clusters. ...

最新文章

  1. [leetcode]_Integer to Roman
  2. 社交媒体如何破坏了你的生活? | 大咖来了
  3. C++学习网站。两个 CodeProject,Codeguru
  4. Lyft开源L5自动驾驶数据集:55000个人工标注的3D注释框架,还有高清空间语义地图...
  5. Java 调用 C++ (Java 调用 dll)康哥手把手教你
  6. RPC简介及框架选择
  7. JS中的异步任务有哪些
  8. 如何科学地浪费朋友手中的啤酒
  9. matlab保存格式可以用cad打开文件,怎么将TXT文件导入CAD中生成图形
  10. 超轻简洁个人引导页网站源码
  11. C#代码生成目录树(转)
  12. (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
  13. 系统服务启动交互式程序(C++)
  14. Javascript 判断浏览器是否为IE的最短方法
  15. 微信分享ios 不显示图片和简介问题总结
  16. iOS内购(代码部分,swift)
  17. 用友U8库存管理软件,用友U8
  18. 用matlab求摆线,求由摆线x=a(t-sint),y=a(1-cost)的一拱(0≦t≦2π)与x轴所围成的图形面积...
  19. 漫说从打工者到企业家的蜕变过程所碰到的问题及解决方案
  20. 宝塔同时安装苹果cms海洋cms_苹果cms用宝塔定时采集+添加百度推送教程

热门文章

  1. 2018ICPC网络赛(焦作站)K题题解
  2. Exchange2013DAG配置-零错误
  3. 安装python 的包控制mysql的Python脚本与执行系统命令的Python脚本
  4. 通讯传输--全双工和半双工
  5. Android listView 去掉header和footer中的分割线
  6. 慢查询优化,我终于在生产踩到了这个坑!!
  7. 面试必问:CPU 占用高,如何一击即中!
  8. 厉害了,ES 如何做到几十亿数据检索 3 秒返回!
  9. 应聘腾讯,面试官和我聊了一个小时的人生
  10. 一些有用的资源分享(工具+电子书)