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

时间: 2024-08-19 10:35:42

使用kmeans对图片进行切割的相关文章

(转)Unity输出 切割后的图片

假设有一张png/tga图集,导入到Unity,放置目录"Assets/Resources/UI"(UI文件夹可替换成其他的,重要的是要在"Assets/Resources/"路径下),默认为如下设置: 为了可以使用Unity自带的精灵切割,要将纹理类型改成"Sprite","Sprite Mode"改成"Multiple","Format"改成"Truecolor"

Android中将一个图片切割成多个图片[转]

有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一个Bitmap对象和一个标识图片的顺序索引的int变量. Java代码   package arui319.blog.csdn.net; import android.graphics.Bitmap; public class ImagePiece { public int index = 0; p

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

有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一个Bitmap对象和一个标识图片的顺序索引的int变量. 1 package com.example.imagesplitter; 2 3 import android.graphics.Bitmap; 4 5 /** 6 * 图片切割实体类 7 */ 8 public class ImagePie

Unity 导出切片精灵

http://blog.csdn.net/akof1314/article/details/38845933 设有一张png/tga图集,导入到Unity,放置目录"Assets/Resources/UI"(UI文件夹可替换成其他的,重要的是要在"Assets/Resources/"路径下),默认为如下设置: 为了可以使用Unity自带的精灵切割,要将纹理类型改成"Sprite","Sprite Mode"改成"Mu

深度学习之卷积神经网络CNN及tensorflow代码实现示例

一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的.当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×28 的手写数字图片,输入层的神经元就有784个,如下图所示: 若在中间只使用一层隐藏层,参数 w 就有 784×15=11760 多个:若输入的是28×28 带有颜色的RGB格式的手写数字图片,输入神经元就有28×28×3=2352 个-- .这很容易看出使用全连接神经网络处理图像中的需要训

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵. 读取图片 图片降噪 图片切割 图像文本输出 验证字符识别 验证码内的字符识别主要以机

GamePinTu

package com.example.administrator.pintu; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.util.AttributeSet; import android.util.TypedValue; import an

android图片处理方法(不断收集中)

//压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while ( baos.toByteArra

6月23号=》201页-205页

8.2.3 CSS3提供的图片边框 CSS3为图片边框提供了如下属性. border-image:该属性的值比较复杂,应该遵守如下格式: <border-image-source> <border-image-slice>[/<border-image-width>]? <border-image-repeat> 上面语法格式可以分为4个部分: border-image-source:指定边框图片.该值可以是none(没有边框图片)或使用url()函数指定图