使用kmeans对图片进行切割

Posted 王起帆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用kmeans对图片进行切割相关的知识,希望对你有一定的参考价值。

源代码地址: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需要制定簇,建议使用简单点的图片效果更明显

以上是关于使用kmeans对图片进行切割的主要内容,如果未能解决你的问题,请参考以下文章

使用 KMeans 算法和 Python 对地理位置坐标(纬度、经度对)进行聚类

机器学习4kmeans实际运用

基于Android平台游戏之小拼图

Android中将一个图片切割成多个图片

3D效果切割轮播图

验证码识别曾用方案