将opencv图像格式转换为PIL图像格式?

时间:2017-04-05 13:35:38

标签: python opencv image-processing type-conversion python-imaging-library

我想转换加载的图片

TestPicture = cv2.imread("flowers.jpg")

我想在示例http://pillow.readthedocs.io/en/4.0.x/reference/ImageFilter.html上使用变量

运行PIL过滤器(https://wellfire.co/learn/python-image-enhancements/
TestPicture

但是我无法将其转换回来,并且在这些类型之间排在第四位。

有没有办法进行这种转换?

opencv可以执行PIL包中的所有图像过滤器吗?

2 个答案:

答案 0 :(得分:20)

是的,OpenCV更强大,更灵活,可以执行大部分可用的图像处理程序。所以可能这个过滤器可以用OpenCV>完成。但是,可能没有简单的API。

无论如何,就将图像格式从OpenCV转换为PIL而言,您可以使用Image.fromarray作为:

import cv2
import numpy as np
from PIL import Image

img = cv2.imread("path/to/img.png")

# You may need to convert the color.
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
im_pil = Image.fromarray(img)

# For reversing the operation:
im_np = np.asarray(im_pil)

但是你必须记住,OpenCV遵循BGR约定,PIL遵循RGB颜色约定,所以为了保持一致,你可能需要使用{{1}在转换之前。

答案 1 :(得分:4)

PillowOpenCV使用不同格式的图片。所以你不能只是在Pillow中读取图像并使用它来操作OpenCV中的图像。 Pillow使用RGB格式突出显示@ZdaR,OpenCV使用BGR格式。所以你需要一个转换器从一种格式转换为另一种格式。

要从PIL图片转换为OpenCV,请使用:

import cv2
import numpy as np
from PIL import Image

pil_image=Image.open("demo2.jpg") # open image using PIL

# use numpy to convert the pil_image into a numpy array
numpy_image=numpy.array(pil_img)  

# convert to a openCV2 image, notice the COLOR_RGB2BGR which means that 
# the color is converted from RGB to BGR format
opencv_image=cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR) 

要从OpenCV图片转换为PIL图片,请使用:

import cv2
import numpy as np
from PIL import Image

opencv_image=cv2.imread("demo2.jpg") # open image using openCV2

# convert from openCV2 to PIL. Notice the COLOR_BGR2RGB which means that 
# the color is converted from BGR to RGB
pil_image=cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB) 
相关问题