引言
本文主要说明以下两个问题:
- PIL的Image与cv2读取图片后的格式以及区别是什么?
- 两种方式读取图片后如何相互转换?
图片读取
from PIL import Image
import cv2
image_path = 'test,jpg'
image = Image.open(image_path).convert('RGB')
image= cv2.imread(image_path)
区别
这两种方式读取图片后,返回的图片格式有以下不同:
-
Image.open(image_path).convert('RGB')
- 使用的是 Python 的
Pillow
库(PIL
)。 - 返回的是一个
PIL.Image.Image
对象。 - 图像数据以像素矩阵的形式存储,每个像素是一个 RGB 值(三通道),范围为 0-255。
- 支持更多的图像格式和操作,适合用于图像处理、绘图等任务。
- 使用的是 Python 的
-
cv2.imread(image_path)
- 使用的是 OpenCV 库。
- 返回的是一个 NumPy 数组 (
numpy.ndarray
)。 - 默认读取的图像是 BGR 格式(不是 RGB),需要手动转换为 RGB 格式(如使用
cv2.cvtColor
)。 - 图像数据以三维数组形式存储,形状为
(height, width, channels)
,通道顺序为 BGR。 - 更适合用于计算机视觉任务,如特征提取、图像变换等。
区别汇总:
特性 | Image.open |
cv2.imread |
---|---|---|
返回类型 | PIL.Image.Image 对象 | numpy.ndarray |
颜色通道顺序 | RGB | BGR |
数据结构 | 图像对象 | 三维数组 (height, width, channels) |
适用场景 | 图像处理、绘图 | 计算机视觉、图像分析 |
相互转换
如果需要将两种格式互相转换,可以使用以下方法:
-
PIL 转 OpenCV:
img_cv = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
-
OpenCV 转 PIL:
img_pil = Image.fromarray(cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB))
好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!