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

    处理前:

    处理后:

  • 相关阅读:
    记一次简单的正则表达式匹配实践
    使用readlines()读取文件时出现/n及其解决办法
    浅谈http和https
    JVM GC回收原理的认识
    Mysql中语言分类和区别
    关于storm程序性能压测记录及总结
    Java 集合框架
    MySQL binlog底层主从同步原理
    Docker-Compose安装
    gcc手动安装
  • 原文地址:https://www.cnblogs.com/millerfu/p/7801316.html
Copyright © 2011-2022 走看看