zoukankan      html  css  js  c++  java
  • KMeans算法分割图片

    使用KMeans算法对简单的jpg图片进行处理得到大概轮廓

    #coding = utf-8
    
    import numpy as np
    import PIL.Image as image
    from sklearn.cluster import KMeans
    
    
    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))#getpixel返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组。
                data.append([x/256.0, y/256.0, z/256.0])#将每个像素归一化成0-1
        f.close()
        return np.mat(data), m, n#返回矩阵形式的data,以及图片大小
    
    imgData, row, col = loadData("F:data\bull.jpg")#使用loadData方法处理图片
    
    label = KMeans(n_clusters=8).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):
            pic_new.putpixel((i, j), int(256/(label[i][j]+1)))
    #保存图片
    pic_new.save("F:data\result_bull.jpg", "JPEG")
    View Code

    处理前:

    处理后:

  • 相关阅读:
    fused multiply and add
    gcc优化选项解析
    gcc的搜索路径,头文件和库
    使用-Wl直接向ld传递参数
    ldd LD_TRACE_LOADED_OBJECTS
    linux下库的使用
    在RedHat 5下安装Oracle 10g详解(转)
    Centos下安装X Window+GNOME Desktop+FreeNX
    oracle exp direct 执行机制
    详解Oracle的unlimited tablespace系统权限
  • 原文地址:https://www.cnblogs.com/millerfu/p/7801316.html
Copyright © 2011-2022 走看看