将内存中的OpenCV映像写入BytesIO或Tempfile

时间:2018-10-18 01:44:39

标签: python opencv

我需要将位于内存中的OpenCV映像写入BytesIO或Tempfile对象,以在其他地方使用。

我担心这是一个死胡同的问题,因为cv2.imwrite()将文件名作为参数,然后使用文件扩展名来推断要写入的图像类型(.jpg,{{1} },.png等)。 .tiff是在C ++级别执行此操作的,因此,我担心无法成功将非文件名对象传递给它。

另一种可能的解决方案是通过cv2.imwrite()转换为PIL,它可以写入numpyBytesIO对象,但是我想避免不必要的复制。

1 个答案:

答案 0 :(得分:2)

cv2.imencode可能会帮助您:

import numpy as np
import cv2
import io

img = np.ones((100, 100), np.uint8)
# encode
is_success, buffer = cv2.imencode(".jpg", img)
io_buf = io.BytesIO(buffer)
# decode
decode_img = cv2.imdecode(np.frombuffer(io_buf.getbuffer(), np.uint8), -1)
print(np.allclose(img, decode_img))   # True