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 BeautifulSoup使用方法详解
Nov 21 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
Python基于scipy实现信号滤波功能
May 08 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
python psutil模块使用方法解析
Aug 01 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
python 绘制正态曲线的示例
Sep 24 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
使用Python拟合函数曲线
Apr 14 Python
python中pycryto实现数据加密
Apr 29 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/09/04 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
python中树与树的表示知识点总结
2019/09/14 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python加载自定义词典实例
2019/12/06 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
社团成立邀请函
2014/01/08 职场文书
员工考核管理制度
2014/02/02 职场文书
节水口号标语
2014/06/19 职场文书
捐款感谢信
2015/01/20 职场文书
面试感谢信范文
2015/01/22 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
MySQL数据库事务的四大特性
2022/04/20 MySQL
Oracle中日期的使用方法实例
2022/07/07 Oracle