踩坑记录 PIL与Opencv读取图像的差别

1.读入的数据类型不同

PIL读入图像,以jepg为例,类型为PIL.JpegImagePlugin.JpegImageFile;
Opencv读入图像,直接就是numpy.ndarray。

2.宽、高顺序不同

PIL读入图像,顺序为:(宽,高),使用np.array()转换类型后,顺序为:(高,宽,通道数)
Opencv读入图像,顺序为:(高,宽,通道数)

3.通道顺序不同

PIL读入为R、G、B;
Opencv读入为B、G、R

4.代码验证对比

以读入该图像为例
在这里插入图片描述

from PIL import Image
import cv2
import numpy as np

print('-----PIL读取-----')
pil_img = Image.open('Dog.jpeg')
print('type(pil_img):', type(pil_img))
print('pil_img.size:', pil_img.size)  # (宽,高)

pil_img_arr = np.array(pil_img)
print('pil_img_arr.shape:', pil_img_arr.shape)  # (高,宽,通道数)


print('-----opencv读取-----')
opc_img = cv2.imread('Dog.jpeg')
print('type(opc_img):', type(opc_img))
print('opc_img.size:', opc_img.size)
print('opc_img.shape:', opc_img.shape)  # (高,宽)


print('-----通道顺序对比-----')
p_r = pil_img_arr[:,:,0]
p_g = pil_img_arr[:,:,1]
p_b = pil_img_arr[:,:,2]

o_b = opc_img[:,:,0]
o_g = opc_img[:,:,1]
o_r = opc_img[:,:,2]

print('------')

运行结果:

-----PIL读取-----
type(pil_img): <class 'PIL.JpegImagePlugin.JpegImageFile'>
pil_img.size: (1000, 562)
pil_img_arr.shape: (562, 1000, 3)
-----opencv读取-----
type(opc_img): <class 'numpy.ndarray'>
opc_img.size: 1686000
opc_img.shape: (562, 1000, 3)
-----通道顺序对比-----
------

Process finished with exit code 0

各通道对比:
在这里插入图片描述
参考链接: CV2和PIL读取图像方法与区别对比

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值