Image.open()和cv2.imread()的区别

  • Image.open()是Pillow库中的函数,Pillow是Python图像处理库,支持常见的图像格式,如JPEG、PNG、BMP等。
  • cv2.imread()是OpenCV库中的函数,OpenCV是一个功能强大的计算机视觉库,支持更多图像格式,包括JPEG、PNG、BMP、GIF、TIFF等。
  • 头文件不同
# PIL
from PIL import Image

# opencv-python
import cv2

img = cv2.imread("src_path")
img = Image.open("src_path")

返回值

  • Image.open()返回一个PIL.Image.Image对象,是Pillow库的图像类型,可以使用Pillow库提供的各种图像处理方法进行操作。
  • cv2.imread()返回一个numpy.ndarray数组,是OpenCV库的图像类型,可以使用OpenCV库提供的图像处理函数对像素值进行操作,适合用于计算机视觉任务和图像处理。

颜色通道顺序

  • Image.open()默认将图像的通道顺序解释为RGB顺序,即红绿蓝(RGB)。
  • cv2.imread()默认将图像的通道顺序解释为BGR顺序,即蓝绿红(BGR)。

颜色通道数量

  • Image.open(): 当打开的图像文件是一张带有透明度通道的图像(例如PNG图像),Image.open()将返回一个四通道的图像对象(RGBA)。其中R、G、B通道分别代表红色、绿色和蓝色通道,A通道代表透明度通道。
  • Image.open():当打开的图像文件不包含透明度通道(例如JPEG图像),Image.open()将返回一个三通道的图像对象(RGB)。其中R、G、B通道同样分别代表红色、绿色和蓝色通道,但没有透明度通道。
  • cv2.imread():当使用cv2.imread()读取的图像文件是一张带有透明度通道的图像时,返回的图像数组将有四个通道(BGRA)。其中B、G、R通道分别代表蓝色、绿色和红色通道,A通道代表透明度通道。
  • cv2.imread():当读取的图像文件没有透明度通道时,cv2.imread()返回一个三通道的图像数组(BGR)。其中B、G、R通道同样分别代表蓝色、绿色和红色通道。

图像的显示方式

  • Image.open():可以使用.show()方法直接显示这个对象的图像内容,或者将其转换为NumPy数组进行进一步处理和显示。
from PIL import Image

# 使用Image.open()读取图像文件
image = Image.open('image.jpg')

# 显示图像
image.show()

  • cv2.imread():可以使用OpenCV提供的其他函数和方法对图像进行处理和显示。
import cv2

# 使用cv2.imread()读取图像文件
image = cv2.imread('image.jpg')

# 显示图像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

互相转化

  • 从PIL图像转换为OpenCV图像:
from PIL import Image
import cv2

# 使用PIL库打开图像
pil_image = Image.open('image.png')

# 将PIL图像转换为OpenCV图像
opencv_image = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)

  • 从OpenCV图像转换为PIL图像:需要注意的是,在将OpenCV图像转换为PIL图像时,需要调整通道顺序,因为OpenCV默认使用BGR通道顺序,而PIL使用RGB通道顺序
from PIL import Image
import cv2
import numpy as np

# 使用OpenCV库读取图像
opencv_image = cv2.imread('image.png')

# 将OpenCV图像转换为PIL图像
pil_image = Image.fromarray(cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB))

你可能感兴趣的:(计算机视觉,计算机视觉)