总结:
opencv读取图片时,读取后转为numpy数组的格式是(height, width, channels).
pillow第三方库读取图片后数据的格式是(width, height).
使用numpy库读取格式为(width, height)的pillow的图片后,
数据的格式自动转为(height, width, channels)
pillow从维度为(height, width, channels)的numpy数据后,
自动将维度调整为(width, height).
代码实验展示:
from PIL import Image
import cv2
import numpy as np
if __name__ == '__main__':
print()
print('测试opencv-python读取图片的格式'.center(50,'-'))
img_cv2 = cv2.imread('bryant.jpg', 1) # 读取图片文件
img_cv2 = np.float32(img_cv2) / 255 # 转为float32类型
print('opencv-python的图片读取格式:(height, width, channels)',img_cv2.shape)
# opencv-python的图片读取格式:(height, width, channels) (667, 1000, 3)
print()
print('测试Python第三方库Pillow读取图片的格式'.center(50,'-'))
img_PIL = Image.open("bryant.jpg")
print(img_PIL.format, img_PIL.size, img_PIL.mode) # JPEG (1000, 667) RGB
print('图片的宽度:', img_PIL.width, '图片的高度:', img_PIL.height) # 图片的宽度: 1000 图片的高度: 667
print()
print('测试Python第三方库NumPy处理PIL图片的方式'.center(50,'-'))
imgNumPy_from_PIL = np.array(img_PIL)
print('imgNumPy的形状是:', imgNumPy_from_PIL.shape) # imgNumPy的形状是: (667, 1000, 3)
print('NumPy处理PIL图片的方式:(height, width, channels)',imgNumPy_from_PIL.shape)
# NumPy处理PIL图片的方式:(height, width, channels) (667, 1000, 3)
print()
print('测试Python第三方库Pillow读取NumPy数据的格式'.center(50,'-'))
mg_PIL_from_Numpy = Image.fromarray(imgNumPy_from_PIL)
print(mg_PIL_from_Numpy.format, mg_PIL_from_Numpy.size, mg_PIL_from_Numpy.mode) # None (1000, 667) RGB
print('图片的宽度:', mg_PIL_from_Numpy.width, '图片的高度:', mg_PIL_from_Numpy.height) # 图片的宽度: 1000 图片的高度: 667
mg_PIL_from_Numpy.show()
img_PIL.show()
控制台输出结果:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
加载个人及系统配置文件用了 891 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> & 'D:\Anaconda3\envs\ssd4pytorch1_2_0\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2021.1.502429796\pythonFiles\lib\python\debugpy\launcher' '61922' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\test4cxq\test.py'
--------------测试opencv-python读取图片的格式--------------
opencv-python的图片读取格式:(height, width, channels) (667, 1000, 3)
------------测试Python第三方库Pillow读取图片的格式-------------
JPEG (1000, 667) RGB
图片的宽度: 1000 图片的高度: 667
-----------测试Python第三方库NumPy处理PIL图片的方式------------
imgNumPy的形状是: (667, 1000, 3)
NumPy处理PIL图片的方式:(height, width, channels) (667, 1000, 3)
----------测试Python第三方库Pillow读取NumPy数据的格式----------
None (1000, 667) RGB
图片的宽度: 1000 图片的高度: 667
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> conda activate ssd4pytorch1_2_0
(ssd4pytorch1_2_0) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq>
使用的原图:bryant.jpg:
运行结果展示: