如何再把PIL图像转为numpy数组
时间: 2023-10-13 16:27:01 浏览: 123
你可以使用 `numpy.array()` 方法将 PIL 图像对象转换为 NumPy 数组:
```python
import numpy as np
from PIL import Image
# 打开图像文件
img = Image.open('image.jpg')
# 将 PIL 图像对象转换为 NumPy 数组
arr = np.array(img)
```
这样就可以将 PIL 图像对象转换为 NumPy 数组了。需要注意的是,转换后的 NumPy 数组的维度顺序是 `(height, width, channels)`,而 PIL 图像对象的维度顺序是 `(width, height)`,所以在对数组进行处理时需要注意维度的顺序。
相关问题
使用cv2库读取图像,然后保存为bmp格式图像; 使用PIL和matplotlib库读取图像,将图像转为numpy数组格式,并缩小到原来的1/4后,再转存为bmp格式。
使用Python的`cv2`库读取图像并保存为BMP格式:
```python
import cv2
# 读取图像
image = cv2.imread('input.jpg')
# 检查图像是否成功读取
if image is not None:
# 保存为BMP格式
cv2.imwrite('output.bmp', image)
else:
print("无法读取图片")
```
使用`Pillow` (PIL) 和 `matplotlib` 库处理图像并转换为BMP:
```python
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
# 读取图像
img_pil = Image.open('input.jpg')
img_array = np.array(img_pil)
# 缩小图像
resized_img = img_array[::4, ::4]
# 将PIL图像转换回numpy数组以便操作
resized_img = np.array(resized_img)
# 使用matplotlib保存为BMP格式
plt.imsave('output.bmp', resized_img, format='bmp')
```
注意:PIL库本身并不直接支持BMP格式的保存,上述代码实际上是通过matplotlib间接实现了BMP保存。
有一个文件夹,下面有多个文件夹,其中包含多个类别的图像。读取图像文件并转为numpy数组,将图像维度转为[图像数量,3,224,224],得到图像标签
,标签为每个图像所在的文件夹的名称。
代码实现如下:
```python
import os
from PIL import Image
import numpy as np
# 设置图像大小
image_size = (224, 224)
# 设置图像文件夹路径
data_path = 'path/to/data_folder/'
# 获取所有图像文件夹的名称
folders = os.listdir(data_path)
# 初始化图像和标签列表
images = []
labels = []
# 遍历每个图像文件夹
for folder_name in folders:
folder_path = os.path.join(data_path, folder_name)
# 获取当前图像文件夹下所有图像文件的路径
image_paths = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.jpg')]
# 遍历每个图像文件,读取图像并转为numpy数组
for image_path in image_paths:
with Image.open(image_path) as img:
# 调整图像大小
img = img.resize(image_size)
# 将图像转为numpy数组
img_arr = np.array(img)
# 转换图像维度
img_arr = np.transpose(img_arr, (2, 0, 1))
# 添加到图像列表中
images.append(img_arr)
# 添加标签
labels.append(folder_name)
# 将图像列表和标签列表转为numpy数组
images = np.array(images)
labels = np.array(labels)
# 打印图像和标签的形状
print('Images shape:', images.shape)
print('Labels shape:', labels.shape)
```
注:以上代码中,假设图像文件格式为jpg。如果是其他格式,可相应修改代码中的判断条件。
阅读全文