jpg图片转成列表为什么是三维数组

图片转三维数组

#导入必要的包
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

#读入图片
imagePath = 'image/testfan.jpg'
img = Image.open(imagePath)

#将img转化为列表
np.array(img)

在将img转化为列表后,发现是这么个三维列表

jpg图片转成列表为什么是三维数组_第1张图片

 这是为什么?

是因为通过jpg格式保存的图片,记录了图片的大小每个像素点的信息(RBG的信息)。每个像素构成一个一维列表,图片的每一行组成一个二维列表,所有的行就组成了一个三维列表,也就是一张jpg格式的图片。譬如是5*5*3的图片,5*5代表图片有5行5列的像素点,*3表示色深是3,即有红绿蓝

对了是因为通过png格式保存的图片,不仅记录了图片的大小每个像素点的信息(RBG的信息),每个像素点中还记录了一个叫“alpha通道”的东西来描述透明度,也就导致了一维数组中有4个元素

jpg图片转成列表为什么是三维数组_第2张图片

三维数组转图片

上面的例子可能还不直观,下面将三维数组转成图片

from PIL import Image

# 生成一个100x100x3的随机三维列表
import random
data = [[[random.randint(0, 255) for _ in range(3)] for _ in range(100)] for _ in range(100)]

# 将三维列表转换为图像
img = Image.new('RGB', (100, 100))
for x in range(100):
    for y in range(100):
        r, g, b = data[x][y]
        img.putpixel((x, y), (r, g, b))

# 显示图像
img.show()

运行这段代码会得到下面这张图片:

jpg图片转成列表为什么是三维数组_第3张图片

没错就是这么一张图,每个小色块代表了一个像素

你可能感兴趣的:(计算机视觉,python)