1 Star 0 Fork 8

欣欣然阿/opencv

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
_25k_means图像分割.py 1.72 KB
一键复制 编辑 原始数据 按行查看 历史
18151521911@163.com 提交于 2022-02-26 18:26 . Initial commit
# -*- 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()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/top_xiong/opencv.git
git@gitee.com:top_xiong/opencv.git
top_xiong
opencv
opencv
master

搜索帮助