python SVD压缩图像的实现代码


Posted in Python onNovember 05, 2019

前言

利用SVD是可以对图像进行压缩的,其核心原因在于,图像的像素之间具有高度的相关性。

代码

# -*- coding: utf-8 -*-
'''
author@cclplus
date:2019/11/3
'''
import cv2
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
#转为u8类型
def restore1(u, sigma, v, k):
  m = len(u)
  n = len(v)
  a = np.zeros((m, n))
  a = np.dot(u[:, :k], np.diag(sigma[:k])).dot(v[:k, :])
  a[a < 0] = 0
  a[a > 255] = 255
  return np.rint(a).astype('uint8')
def SVD(frame,K=10):
  a = np.array(frame)
  #由于是彩色图像,所以3通道。a的最内层数组为三个数,分别表示RGB,用来表示一个像素
  u_r, sigma_r, v_r = np.linalg.svd(a[:, :, 0])
  u_g, sigma_g, v_g = np.linalg.svd(a[:, :, 1])
  u_b, sigma_b, v_b = np.linalg.svd(a[:, :, 2])
  R = restore1(u_r, sigma_r, v_r, K)
  G = restore1(u_g, sigma_g, v_g, K)
  B = restore1(u_b, sigma_b, v_b, K)
  I = np.stack((R, G, B), axis = 2)
  return I
   

if __name__ == "__main__":
  mpl.rcParams['font.sans-serif'] = [u'simHei']
  mpl.rcParams['axes.unicode_minus'] = False
  frame = cv2.imread("./liuyifei.bmp")
  I = SVD(frame,40)
  plt.imshow(I)
  cv2.imwrite("out.bmp",I)

原图

python SVD压缩图像的实现代码

取二十个特征值

python SVD压缩图像的实现代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Python中文件操作简明介绍
Apr 13 Python
Python+django实现文件下载
Jan 17 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Python调用Windows命令打印文件
Feb 07 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
Python趣味挑战之实现简易版音乐播放器
May 28 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 #Python
python中for循环变量作用域及用法详解
Nov 05 #Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 #Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 #Python
Python socket模块ftp传输文件过程解析
Nov 05 #Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 #Python
Python socket模块方法实现详解
Nov 05 #Python
You might like
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
Python模拟登录12306的方法
2014/12/30 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python的socket编程入门
2018/01/29 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
如何进行Linux分区优化
2013/02/12 面试题
中式面点餐厅创业计划书
2014/01/29 职场文书
消防安全宣传口号
2014/06/10 职场文书
2015年招生工作总结
2015/05/04 职场文书
闪闪的红星观后感
2015/06/08 职场文书
幼儿园六一主持词
2015/06/30 职场文书
读书笔记怎么写
2015/07/01 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Python制作春联的示例代码
2022/01/22 Python