import cv2 import numpy as np from numpy import * image_name='F:\\train\\365.jpg' img = cv2.imread(image_name,0) print(img[1,:]) dataMat = mat(img) print(type(img[1,1])) cv2.imshow('img1',dataMat) cv2.waitKey(0) cv2.destroyAllWindows() U,Simga,VT = linalg.svd(dataMat) print(shape(U),shape(Simga),shape(VT)) mat=zeros([256,384]) for i,j in enumerate(mat): j[i]=Simga[i] data=np.dot(np.dot(U,mat),VT) print(shape(data)) print(type(data[1,1])) print(data[1,:]) cv2.imshow('img',data) cv2.waitKey(0) cv2.destroyAllWindows()
上面图像显示存在问题:
原图
输出图像
原因:输出的data数据的类型为float64,float64默认将0到1的数映射到0到255
为此可以加一句data/=255
也可以用data=data.astype(uint8)