首页 > 技术文章 > 使用kmeans对图片进行切割

zuin 2017-06-11 19:13 原文

源代码地址:https://github.com/wangqifan/PictureCutting

效果

切割前

切割后

接下来介绍如何写这个程序

首选导入工具包:

import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeans

然后将图片数据加载到numpy数组中

def loadData(filepath):
    f=open(filepath,'rb')
    data=[]
    img=image.open(f)
    m,n=img.size
    for i in range(m):
        for j in range(n):
             x,y,z = img.getpixel((i,j))
             data.append([x/256.0,y/256.0,z/256.0])
    f.close()
    return np.mat(data),m,n


imgData,row,col=loadData("wqf.jpg")

对数据进行学习

label = KMeans(n_clusters=20).fit_predict(imgData)

对结果进行展示

label=label.reshape([row,col])
pic_new =image.new("L",(row,col))
for i in range(row):
    for j in range(col):
       print(label[i][j])
       pic_new.putpixel((i,j),int(256/(label[i][j]+2)))
pic_new.save("2.jpg","JPEG")

NOTE:kmeans需要制定簇,建议使用简单点的图片效果更明显

推荐阅读