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自动扫雷实现方法
Jul 25 Python
python处理Excel xlrd的简单使用
Sep 12 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
python实现机器学习之元线性回归
Sep 06 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Python中*args和**kwargs的区别详解
Sep 17 Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
Django设置Postgresql的操作
May 14 Python
解决python3安装pandas出错的问题
May 20 Python
pytorch 如何使用amp进行混合精度训练
May 24 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
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
Symfony查询方法实例小结
2017/06/28 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python中按键来获取指定的值
2019/03/02 Python
使用Python实现画一个中国地图
2019/11/23 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python代码区分大小写吗
2020/06/17 Python
类的核心特性有哪些
2014/01/01 面试题
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
实习期自我鉴定
2013/10/11 职场文书
美术指导求职信
2014/03/17 职场文书
班风口号
2014/06/18 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL