md1*_*nox 67 python opencv image-processing 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()
Run Code Online (Sandbox Code Playgroud)
但我认为图像没有转换为CV格式.窗口向我显示一个大的棕色图像.在将图像转换PIL
为CV
格式时我在哪里出错了?
另外,为什么我需要键入cv.cv
访问功能?
Abh*_*kur 117
用这个:
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()
Run Code Online (Sandbox Code Playgroud)
Ber*_*eux 54
这是我能找到的最短版本,保存/隐藏额外的转换:
pil_image = PIL.Image.open('image.jpg')
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
Run Code Online (Sandbox Code Playgroud)
如果从URL读取文件:
import cStringIO
import urllib
file = cStringIO.StringIO(urllib.urlopen(r'http://stackoverflow.com/a_nice_image.jpg').read())
pil_image = PIL.Image.open(file)
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
Run Code Online (Sandbox Code Playgroud)
小智 25
注释的代码也有效,只需选择您喜欢的
import numpy as np
from PIL import Image
def convert_from_cv2_to_image(img: np.ndarray) -> Image:
# return Image.fromarray(img)
return Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
def convert_from_image_to_cv2(img: Image) -> np.ndarray:
# return np.asarray(img)
return cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
Run Code Online (Sandbox Code Playgroud)