Pillow与opencv的基础代码与区别

读取图像

import cv2
from PIL import Image
import numpy as np
img_path = r'path/to/img.jpg'
#PIL读取图片,数据类型:<PIL.PngImagePlugin.PngImageFile>
pil_img = Image.open(img_path)
#opencv读取图片,数据类型:<ndarray>
cv_img = cv2.imread(img_path) #非中文路径读取
cv_img = cv2.imdecode(np.fromfile(img_path,dtype=np.uint8),-1)#可包含中文路径读取

需要注意:PIL读取图像通道顺序为RGB,opencv读取的图像通道顺序为BGR。

获取图像大小

#PIL获取图像大小
w,h = pil_img.size
#或
h,w = np.array(pil_img).shape[:2]
#opencv获取图像大小
h,w = cv_img.shape[:2]

需要注意:PIL获取尺寸的顺序为宽w、高h,而opencv获取尺寸的顺序为高h、宽w。

转换通道顺序

#PIL转换通道为RGB
pil_img = pil_img.convert('RGB')
#opencv转换通道为RGB
cv_img = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)

缩放图像

new_size = 224
#PIL使用双线性插值缩放图像
pil_img = pil_img.resize((new_size,new_size), Image.BILINEAR)
#opencv使用双线性插值缩放图像
cv_img = cv2.resize(cv_img,(new_size,new_size),interpolation = cv2.INTER_LINEAR)

需要注意:即使是同一输入图像,都选用双线性插值方式,PIL与opencv结果的图像像素也会有些微差别,如果是用于深度学习等模型训练预测,要特别注意。另外transforms.Resize就是PIL.Image.resize。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值