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 sys.argv[]用法实例详解
May 25 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
python对接ihuyi实现短信验证码发送
May 10 Python
Python如何把十进制数转换成ip地址
May 25 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 Python
Python测试框架pytest高阶用法全面详解
Jun 01 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP面向对象概念
2011/11/06 PHP
php车辆违章查询数据示例
2016/10/14 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
通过修改referer下载文件的方法
2008/05/11 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
DataFrame中的object转换成float的方法
2018/04/10 Python
python实现随机漫步算法
2018/08/27 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
python中wx模块的具体使用方法
2020/05/15 Python
python实现AdaBoost算法的示例
2020/10/03 Python
Python可以用来做什么
2020/11/23 Python
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
上班打牌检讨书
2014/02/07 职场文书
高中打架检讨书
2014/02/13 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
社区活动总结报告
2014/05/05 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
学校实习推荐信
2015/03/27 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis