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

24
我需要将存储在内存中的OpenCV图像写入BytesIO或Tempfile对象,以便在其他地方使用。
我担心这是一个死路问题,因为cv2.imwrite()需要将文件名作为参数,然后使用文件扩展名来推断要写入的图像类型(.jpg.png.tiff等)。cv2.imwrite()在C++级别执行此操作,因此我担心没有成功将非文件名对象传递给它的方法。
另一个可能的解决方案是通过numpy转换为PIL,后者可以写入BytesIOTempfile对象,但我想避免不必要的复制。
1个回答

54

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

这可能非常有用。我明天会去查看它。谢谢。 - Chris Conlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接