OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类
目标
- 学习使用cv2.kmeans()数据聚类函数OpenCV
理解参数
输入参数
样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列。
nclusters(K):数量的集群需要结束
标准:这是迭代终止准则。 当这个标准是满足,算法迭代停止。 实际上,它应该是一个元组的三个参数。 他们是
( type,max_iter,epsilon)
:
3. a -type 的终止条件:它有三个标志如下:
cv2.TERM_CRITERIA_EPS——停止算法迭代如果指定的精度,ε是达到了。cv2.TERM_CRITERIA_MAX_ITER——停止指定数量的迭代算法后,max_iter。cv2。 TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER——任何上述条件时停止迭代。
- 3. b - max_iter整数指定最大迭代数。
- 3. c -epsilon 所需精度
尝试:标记来指定执行的次数算法使用不同的初始标签。 算法返回标签,产生最佳的密实度。 这个密实度是作为输出返回。
旗帜:这个标志用于指定初始中心。 通常用于这两个标记:cv2.KMEANS_PP_CENTERS和cv2.KMEANS_RANDOM_CENTERS。
输出参数
- 密实度:这是每一个点的距离的平方和相应的中心。
- 标签:这是标签阵列,其中每个元素标记1,另一个为0
- 中心:这是一系列的集群中心。
以下是示例代码:
第一个基本语法 与 一维数据聚类
# -*- 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聚类 -对图片进行颜色量化相关推荐
- Python OpenCV应用K均值聚类进行颜色量化
Python OpenCV应用K均值聚类进行颜色量化 1. 效果图 2. 颜色量化是什么? 3. MiniBatchKMeans & KMeans 4. 源码 参考 在这篇博客文章中,我将向您 ...
- OpenCV官方文档 理解k - means聚类
理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...
- k means聚类算法_K-Means 聚类算法 20210108
说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...
- c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现
对于比 较大的类别,如遥感影像中以像素数目表示的较大 的类别,式(1)可以近似表示为 仃222 n2丁 在遥感分类应用中,一般采用试探性的方法确定 选择训练样本数量,选取规则是每个类别需要的样本 数量 ...
- k means聚类算法_一文读懂K-means聚类算法
1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...
- 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, ...
- 机器学习(十四):K均值聚类(kmeans)
k均值聚类方法是一种无监督机器学习技术,用于识别数据集中的数据对象集群.有许多不同类型的聚类方法,但k -means是最古老和最平易近人的方法之一.这些特性使得在 Python 中实现k -means ...
- matlab调用kmeans_使用 K 均值聚类实现基于颜色的分割
步骤 1:读取图像 在 hestain.png 中读取,这是一个带有苏木精和曙红染色组织 (H&E) 的图像.这种染色方法有助于病理学家区分不同组织类型. he = imread('hesta ...
- Kmeans K均值聚类,OpenCV实现
Clustering 聚类 kmeans k均值聚类 Finds centers of clusters and groups input samples around the clusters. ...
最新文章
- [leetcode]_Integer to Roman
- 社交媒体如何破坏了你的生活? | 大咖来了
- C++学习网站。两个 CodeProject,Codeguru
- Lyft开源L5自动驾驶数据集:55000个人工标注的3D注释框架,还有高清空间语义地图...
- Java 调用 C++ (Java 调用 dll)康哥手把手教你
- RPC简介及框架选择
- JS中的异步任务有哪些
- 如何科学地浪费朋友手中的啤酒
- matlab保存格式可以用cad打开文件,怎么将TXT文件导入CAD中生成图形
- 超轻简洁个人引导页网站源码
- C#代码生成目录树(转)
- (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
- 系统服务启动交互式程序(C++)
- Javascript 判断浏览器是否为IE的最短方法
- 微信分享ios 不显示图片和简介问题总结
- iOS内购(代码部分,swift)
- 用友U8库存管理软件,用友U8
- 用matlab求摆线,求由摆线x=a(t-sint),y=a(1-cost)的一拱(0≦t≦2π)与x轴所围成的图形面积...
- 漫说从打工者到企业家的蜕变过程所碰到的问题及解决方案
- 宝塔同时安装苹果cms海洋cms_苹果cms用宝塔定时采集+添加百度推送教程