這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么在python中利用SVD對圖像進(jìn)行壓縮,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供成都二樞服務(wù)器租用托管,高防主機(jī),成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。# -*- coding: utf-8 -*- import cv2 import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #轉(zhuǎn)為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的最內(nèi)層數(shù)組為三個數(shù),分別表示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對圖像進(jìn)行壓縮了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。