图片转化成矩阵
方法一:
使用 PIL 的方法 + img.getdata() 提取数据 + np.array() 的转换
- 最后得到的结果是个二维数组
from PIL import Image
import numpy as np
'''图片转数组'''
img = Image.open('1.jpg') # 使用 PIL 打开图片
data = img.getdata() # 获取图片的数据信息 class <'ImagingCore'>
data = np.array(data) # 把这个数据通过 numpy 转换成多维度的张量
print(data)
方法二:
直接用 cv2.imread() 读出来就是个三维的数组
import cv2
img2 = cv2.imread('1.jpg') # 使用 cv2 来打开图片
print(img2)
如果想知道方法一和方法二的区别,可以查阅我的上一篇 opencv 学习文章:
https://blog.csdn.net/qq_42902997/article/details/108326214
矩阵转换成图片
- 产生一个 625 * 625 * 3 的图片,先产生 625 * 625 * 3 = 1171875 个像素点
- 将产生的数据通过numpy 进行 resize
- 将处理过的矩阵通过 imwrite 写成新的图片(如果没有这一步而直接 imshow 会出错)
错误代码段
data = [random.randint(0,255) for _ in range(1171875)]
data = np.resize(data,(625,625,3))
print(data)
cv2.imshow('img2',data) # 错误示范:这里直接将矩阵是 imshow 不出结果的
cv2.waitKey(0)
正确代码段
import numpy as np
import cv2
import random
data = [random.randint(0,255) for _ in range(1171875)]
data = np.resize(data,(625,625,3))
print(data)
cv2.imwrite('2.jpg',data)
s = cv2.imread('2.jpg')
cv2.imshow('img2',s)
cv2.waitKey(0)
最后产生了一张这样的图:其中像素点的值都在 0-255 之间