PIL的Image与cv2这两种方式读取图片格式的区别以及转换方式

引言

本文主要说明以下两个问题:

  1. PIL的Image与cv2读取图片后的格式以及区别是什么?
  2. 两种方式读取图片后如何相互转换?

图片读取

from PIL import Image
import cv2
image_path = 'test,jpg'
image = Image.open(image_path).convert('RGB')
image= cv2.imread(image_path) 

区别

这两种方式读取图片后,返回的图片格式有以下不同:

  1. Image.open(image_path).convert('RGB')

    • 使用的是 Python 的 Pillow 库(PIL)。
    • 返回的是一个 PIL.Image.Image 对象。
    • 图像数据以像素矩阵的形式存储,每个像素是一个 RGB 值(三通道),范围为 0-255。
    • 支持更多的图像格式和操作,适合用于图像处理、绘图等任务。
  2. 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))
    

在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!