代码拉取完成,页面将自动刷新
同步操作将从 大奥特曼打小怪兽/opencv 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 18 21:22:56 2018
@author: zy
"""
'''
k-means聚类 对图像分割
'''
import numpy as np
import cv2
def k_means(n,k,img):
'''
n为迭代次数
k为聚类数目
img为输入图片
'''
length = img.shape[0]
img_new = img.copy()
#按列合并
img_new = np.column_stack((img_new,np.ones(length)))
#随机选择初始点
center_point = np.random.choice(length, k, replace=False)
center = img_new[center_point,:]
distance = [[] for i in range(k)] # 距离度量
for i in range(n):
for j in range(k):
distance[j] = np.sqrt(np.sum(np.square(img_new - np.array(center[j])), axis=1)) # 更新距离
img_new[:,3] = np.argmin(np.array(distance), axis=0) # 将最小距离的类别标签作为当前数据的类别
for l in range(k):
center[l] = np.mean(img_new[img_new[:,3]==l], axis=0) # 更新聚类中心
return img_new
if __name__ == '__main__':
img = cv2.imread('image/book1.jpg')
rows,cols = img.shape[:2]
sacle = 0.2
new_rows = int(rows*sacle)
new_cols = int(cols*sacle)
print('img',img.shape)
img = cv2.resize(img,dsize=(new_cols,new_rows))
data = img.reshape(-1, 3)
img_new = k_means(100,5,data)
print(img_new.shape)
# data_new = np.delete(data_new, 3, axis=1)
# print(data_new.shape)
pic_new = img_new[:,3].reshape(new_rows,new_cols) # 将多个标签展示出来
cv2.imshow('',pic_new)
cv2.waitKey(0)
cv2.destroyAllWindows()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。