zoukankan      html  css  js  c++  java
  • 第九次作业——K-means算法应用:图片压缩

    一.读取一张示例图片或自己准备的图片,观察图片存放数据特点。

    根据图片的分辨率,可适当降低分辨率。

    再用k均值聚类算法,将图片中所有的颜色值做聚类。

    然后用聚类中心的颜色代替原来的颜色值。

    形成新的图片。

    观察原始图片与新图片所占用内存的大小。

    将原始图片与新图片保存成文件,观察文件的大小。

    #读取一张示例图片或自己准备的图片,观察图片存放数据特点
    from sklearn.datasets import load_sample_image 
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    import numpy as np
    
    #读取图片
    china = load_sample_image("china.jpg")
    plt.imshow(china)
    plt.show()
    print(china.shape)#观察图片存放数据特点
    china
    
    #根据图片的分辨率,可适当降低分辨率
    image = china[::3, ::3] 
    X = image .reshape(-1,3)
    plt.imshow(image)
    plt.show()
    print(image.shape,X.shape)
    
    #再用k均值聚类算法,将图片中所有的颜色值做聚类。
    n_colors =64 #(256,256,256)
    model = KMeans(n_colors) 
    
    #每个点的颜色分类,0-63
    labels = model.fit_predict(X)
    
     #64个聚类中心,颜色值
    colors = model.cluster_centers_ 
    
     #用聚类中心的颜色代替原来的颜色值
    new_image=colors[labels] 
    
    #形成新的照片
    new_image=new_image.reshape(image.shape) 
    plt.imshow(new_image.astype(np.uint8))
    plt.show()
    
    #观察原始图片与新图片所占用内存的大小,将原始图片与新图片保存成文件,观察文件的大小。
    import matplotlib.image as img
    img.imsave('F:\china.jpg',china)
    img.imsave('F:\china_zip.jpg',image)

    运行结果

    二.理解贝叶斯定理:

    • M桶:7红3黄
    • N桶:1红9黄
    • 现在:拿出了一个红球
    • 试问:这个红球是M、N桶拿出来的概率分别是多少?

  • 相关阅读:
    MultipartFile(文件的上传)
    JSONObject.fromObject--JSON与对象的转换
    Map集合与转化
    java读取excel文件
    Java中的Arrays类使用详解
    Arrays 类的 binarySearch() 数组查询方法详解
    JDK8 特性详解
    关于Java堆、栈和常量池的详解
    深入java final关键字
    杯酒人生
  • 原文地址:https://www.cnblogs.com/didi-l/p/9921664.html
Copyright © 2011-2022 走看看