python SVD压缩图像的实现代码

yipeiwu_com5年前Python基础

前言

利用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设计】。

相关文章

python opencv之SURF算法示例

python opencv之SURF算法示例

本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,...

python调用java模块SmartXLS和jpype修改excel文件的方法

本文实例讲述了python调用java模块SmartXLS和jpype修改excel文件的方法。分享给大家供大家参考。具体实现方法如下: # -*- coding: utf8 -*-...

通过python实现windows桌面截图代码实例

这篇文章主要介绍了python实现windows桌面截图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码实例 impo...

python 解析XML python模块xml.dom解析xml实例代码

一 、python模块 xml.dom 解析XML的APIminidom.parse(filename)加载读取XML文件 doc.documentElement获取XML文档对象 no...

Python谱减法语音降噪实例

代码中用到了nextpow2,其中n = nextpow2(x) 表示最接近x的2的n次幂。 #!/usr/bin/env python import numpy as np imp...