将图像从PIL转换为openCV格式

时间:2013-01-03 07:44:04

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

我正在尝试将图片从PIL转换为OpenCV格式。我正在使用OpenCV 2.4.3。 这是我到目前为止所尝试过的。

>>> from PIL import Image
>>> import cv2 as cv
>>> pimg = Image.open('D:\\traffic.jpg')                           #PIL Image
>>> cimg = cv.cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3)    #CV Image
>>> cv.cv.SetData(cimg,pimg.tostring())
>>> cv.cv.NamedWindow('cimg')
>>> cv.cv.ShowImage('cimg',cimg)
>>> cv.cv.WaitKey()

但我认为图像没有转换为CV格式。窗口向我显示一个大的棕色图像。 在将图像从PIL转换为CV格式时,我在哪里出错?

另外,为什么我需要输入cv.cv来访问函数?

3 个答案:

答案 0 :(得分:95)

使用它:

pil_image = PIL.Image.open('Image.jpg').convert('RGB') 
open_cv_image = numpy.array(pil_image) 
# Convert RGB to BGR 
open_cv_image = open_cv_image[:, :, ::-1].copy() 

答案 1 :(得分:43)

这是我能找到的最短版本,保存/隐藏额外的转换:

CurrCount

如果从网址读取文件:

pil_image = PIL.Image.open('image.jpg')
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)

答案 2 :(得分:3)

注释的代码也可以,只需选择您喜欢的代码

import numpy as np
from PIL import Image


def convert_from_cv2_to_image(img: np.ndarray) -> Image:
    # return Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    return Image.fromarray(img)


def convert_from_image_to_cv2(img: Image) -> np.ndarray:
    # return cv2.cvtColor(numpy.array(img), cv2.COLOR_RGB2BGR)
    return np.asarray(img)