图片压缩-KMeans
下面给大家一起分享使用KMeans自动聚类,压缩图片像素点。每种图片可能他们的维度都不同,比如jpg一共有(w,h,3)三维,但是灰度图只有一维(w,h,1),也有四维的图片(w,h,4)等等。我们可以将这些不同维度的图片映射到一维的空间中。拿三维图片来做解释吧,三维图有rgb三种颜色,首先把每个点r、g、b三个颜色数值提取转换为(w*h,3),然后使用KMeans训练自动聚类模型,把转换过后的图片矩阵喂入模型得出不同的类别。再找到类别中心点,然后重新创建图片矩阵。代码如下所示:
# coding:utf-8
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn.utils import shuffle
from sklearn.datasets import load_sample_image imgData = load_sample_image('china.jpg') # imgData = plt.imread('./img/img.png') # ./img/timg.jpg
plt.figure('image1');plt.xticks([]);plt.yticks([])
plt.imshow(imgData) # 压缩图片
def im_resize(imgData,pixel=8):
w,h,rgb = imgData.shape
img = 0
if rgb==3 or rgb == 1:
img = np.array(imgData,dtype=float)/255
else:
img = imgData img1 = img.reshape(-1,rgb)
x_train = shuffle(img1) # 聚类模型建立
kmeans = KMeans(n_clusters=pixel)
kmeans.fit(x_train[:2000,:])
# 分别对原始图片进行分类
x_class = kmeans.predict(img1)
# 类别的中心点
cluster_center = kmeans.cluster_centers_
image = np.zeros([w,h,rgb])
n = 0
for i in range(w):
for j in range(h):
index = x_class[n]
rgbColor = cluster_center[index,:]
image[i,j] = rgbColor
n+=1
return image image_new = im_resize(imgData,pixel=16)
print(image_new.shape)
plt.figure('image2')
plt.imshow(image_new)
plt.xticks([]);plt.yticks([])
plt.show()
图片压缩-KMeans的更多相关文章
- K-Means和图片压缩
		
通俗的介绍这种压缩方式,就是将原来很多的颜色用少量的颜色去表示,这样就可以减小图片大小了.下面首先我先介绍下K-Means,当你了解了K-Means那么你也很容易的可以去理解图片压缩了,最后附上图片压 ...
 - python中学习K-Means和图片压缩
		
python中学习K-Means和图片压缩 大家在学习python中,经常会使用到K-Means和图片压缩的,我们在此给大家分享一下K-Means和图片压缩的方法和原理,喜欢的朋友收藏一下吧. 通俗的 ...
 - 开发一款图片压缩工具(二):使用 pngquant 实现图片压缩
		
上一篇我尝试使用了 pillow 库对 png 图片进行了压缩,效果不好.这次我换用 pngquant 来压缩.pngquant 是用于 PNG 图像有损压缩的命令行实用程序和库.压缩程序会显著减小文 ...
 - Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
		
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
 - 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
		
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
 - 前端构建工具之gulp(一)「图片压缩」
		
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
 - gulp图片压缩
		
gulp图片压缩 网页性能优化,通常要处理图片,尤其图片量大的时候,更需要工具来批量处理,这里使用gulp,做个简单总结 image-resize压缩尺寸 var gulp = require('gu ...
 - Android  图片压缩、照片选择、裁剪,上传、一整套图片解决方案
		
1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...
 - Java中图片压缩处理
		
原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...
 
随机推荐
- centos 升级内核(编译安装)
			
yum install -y wget gcc gc bc gd make perl ncurses-devel xz下载地址:https://www.kernel.org#tar -Jxvf lin ...
 - BZOJ 3173 最长上升子序列(树状数组+二分+线段树)
			
给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 由于序列是顺序插入的,所以当前插入的数字对之 ...
 - Python 字节码是什么
			
了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...
 - rabbitmq 集群安装
			
1.安装模式分为三种:单主机模式.普通集群模式.镜像集群模式. 单主机模式:rabbitmq运行在一台主机上,生产环境不建议使用该模式,性能有限.如果该台主机down机,整个服务将不可用. 普通集群模 ...
 - MT【114】构造二次函数
			
评:b+c,bc好比向量里的一组基底,可以将关于b,c的对称式表示出来.
 - Nagios通过企业微信报警
			
主要分两部分进行: 注册企业微信,自建应用,获取与发送消息相关的信息: 编写调用微信API脚本(bash),配置Nagios微信报警: 一.企业微信 1.注册企业微信:https://work.wei ...
 - 【BZOJ1072】排列(搜索)
			
[BZOJ1072]排列(搜索) 题面 BZOJ 洛谷 题解 算下复杂度,如果用\(next\_permutation\) 那就是\(10!\times 10\times 15\),复杂度不太对 那好 ...
 - 【codeforces 765F】 Souvenirs
			
http://codeforces.com/problemset/problem/765/F (题目链接) 题意 给出$n$个数的序列,$m$次询问,每次查询区间$[l,r]$之间相差最小的两个数的差 ...
 - 项目开发中git常用命令、git工作流、git分支模型
			
#新建代码库git init # 在当前目录新建一个Git代码库git init [project-name] # 新建一个目录,将其初始化为Git代码库git clone [url] # 下载一个项 ...
 - 【loj2586】【APIO2018】选圆圈
			
题目 有 \(n\) 个圆$c_1,c_2, \cdots , c_n $,执行如下的操作: 找到剩下的半径最大的圆删除并删除所有和它有交的其他并没有被删除的圆: 求每个圆是被那个圆删除的: $1 \ ...