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输出一个杨辉三角的例子
Jun 13 Python
Python中的filter()函数的用法
Apr 27 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
TensorFlow变量管理详解
Mar 10 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
python中setuptools的作用是什么
Jun 19 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
python 操作excel表格的方法
Dec 05 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 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框架Symfony2经典入门教程
2014/07/08 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP count()函数讲解
2019/02/03 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
Python实现的快速排序算法详解
2017/08/01 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
世界文化遗产导游词
2015/02/13 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书