[压缩图片]

#压缩图片
len

from PIL import Image
import numpy as np

def get_approx_SVD1(data, percent):
    U, s, VT = np.linalg.svd(data)
    Sigma = np.zeros(np.shape(data))
    Sigma[:len(s), :len(s)] = np.diag(s)
    count = int(sum(s) * percent)
    k = -1
    curSum = 0
    while curSum <= count:
        k += 1
        curSum += s[k]
    D = U[:, :k].dot(Sigma[:k, :k].dot(VT[:k, :]))
    D[D < 0] = 0
    D[D > 255] = 255
    return np.rint(D).astype("uint8")


def get_approx_SVD2(data, percent):
    U, s, VT = np.linalg.svd(data)
    Sigma = np.zeros(np.shape(data))
    Sigma[:len(s), :len(s)] = np.diag(s)
    k = int(len(s) * percent)
    D = U[:, :k].dot(Sigma[:k, :k].dot(VT[:k, :]))
    D[D < 0] = 0
    D[D > 255] = 255
    return np.rint(D).astype("uint8")


def rebuild_img(filename, p, get_approx_SVD):
    img = Image.open(filename, 'r')
    a = np.array(img)
    R0 = a[:, :, 0]
    G0 = a[:, :, 1]
    B0 = a[:, :, 2]
    R = get_approx_SVD(R0, p)
    G = get_approx_SVD(G0, p)
    B = get_approx_SVD(B0, p)
    I = np.stack((R, G, B), 2)
    Image.fromarray(I).save(str(p * 100) + ".jpg")
    img = Image.open(str(p * 100) + ".jpg", "r")
    img.show()
filename = "lena.png"
for p in np.arange(0.2, 1.2, 0.2):
    rebuild_img(filename, p, get_approx_SVD1)
    
for p in np.arange(0.2, 1.2, 0.2):
    rebuild_img(filename, p, get_approx_SVD2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值