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环境下搭建属于自己的pip源的教程
May 05 Python
python3 shelve模块的详解
Jul 08 Python
Python实现购物车功能的方法分析
Nov 10 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Python3.5文件修改操作实例分析
May 01 Python
利用python如何在前程无忧高效投递简历
May 07 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python路径的写法及目录的获取方式
Dec 26 Python
Django认证系统user对象实现过程解析
Mar 02 Python
详解python 内存优化
Aug 17 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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函数)
2006/10/09 PHP
PHP数字格式化
2006/12/06 PHP
php5.2.0内存管理改进
2007/01/22 PHP
PHP中读写文件实现代码
2011/10/20 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
JS实现滑动插件
2020/01/15 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
贷款工作证明模板
2015/06/12 职场文书
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers
html用代码制作虚线框怎么做? dw制作虚线圆圈的技巧
2022/12/24 HTML / CSS