opencv和numpy以及pillow处理图片时数据各个维度的布局是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
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 Imageimport cv2import numpy as npif __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) RGBprint('图片的宽度:', img_PIL.width, '图片的高度:', img_PIL.height) # 图片的宽度: 1000 图片的高度: 667print()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) RGBprint('图片的宽度:', mg_PIL_from_Numpy.width, '图片的高度:', mg_PIL_from_Numpy.height) # 图片的宽度: 1000 图片的高度: 667mg_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/ssd4pytorch2_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 ssd4pytorch2_2_0 (ssd4pytorch2_2_0) PS C:/Users/chenxuqi/Desktop/News4cxq/test4cxq>
使用的原图:bryant.jpg:
运行结果展示:
关于opencv和numpy以及pillow处理图片时数据各个维度的布局是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/223947.html