【问题标题】:Convert an image between PIL to Cv2 Python 3.6.3将 PIL 之间的图像转换为 Cv2 Python 3.6.3
【发布时间】:2017-12-11 21:22:34
【问题描述】:
如何将图像从 PIL 传递到 cv2 而无需保存和重新加载?
import cv2
import numpy as np
from PIL import Image
img = Image.open('path/to/pic.jpg')
#modify picture using PIL
img.save('path/to/pic.jpg')
img = cv2.imread("pic.jpg")
【问题讨论】:
标签:
python
image
python-imaging-library
cv2
【解决方案1】:
以下内容适用于Python 3.7.3:
from PIL import Image
from cv2 import cvtColor, COLOR_BGR2RGB
from numpy import array
# get the image path
img_path = 'images/test.jpg'
img_rgb = cvtColor(array(Image.open(img_path)), COLOR_BGR2RGB)
【解决方案2】:
您可以访问 bytes 并构造您的 numpy 数组(cv2 在内部也使用 numpy 来存储它们的数据)。
def imageToNumpy():
with Image.open('dark.jpg') as img:
nparray = np.fromstring(img.tobytes(), dtype=np.uint8)
nparray = nparray.reshape((img.size[1], img.size[0], img.layers))
return nparray
cv2.imwrite("testme.png", imageToNumpy() )
【解决方案3】:
使用tempfile
未经测试的代码:
temp_file = TemporaryFile()
with open('path/to/pic.jpg', 'wb') as f:
temp_file.write(f)
temp_file.seek(0)
pil_img = Image.open(temp_file)
cv_img = cv2.imread(temp_file)