PIL.Image 和 OpenCV 图像格式互转

最近做一些图像处理的时候经常用到 PIL.Image 和 OpenCV 这两个东西。

稍微有点了解的应该都清楚,这两个库在图像处理方面很多功能类似,但是它们读取图片的格式却是不一样的,这就导致在混用一些图像处理工具的时候经常需要进行格式转换,在这里记录一下两种格式互转的方法。

PIL.Image 转换成 OpenCV 格式

1
2
3
4
5
6
import cv2
from PIL import Image
import numpy

pil_im = Image.open("image.jpg")
cv2_im = cv2.cvtColor(numpy.asarray(pil_im),cv2.COLOR_RGB2BGR)

由于 PIL.Image 使用的颜色模式是 RGB ,而 OpenCV 使用的是 BGR ,所以我们在二者间进行格式转换的时候使用了 cv2.COLOR_RGB2BGR 控制颜色模式的转换。

OpenCV 转换成 PIL.Image 格式

1
2
3
4
5
6
import cv2  
from PIL import Image
import numpy

cv2_im = cv2.imread("image.jpg")
pil_im = Image.fromarray(cv2.cvtColor(cv2_im,cv2.COLOR_BGR2RGB))

同上,使用 cv2.COLOR_BGR2RGB 控制颜色模式的转换。