Python 将内存中的OpenCV图像写入BytesIO或Tempfile
我需要将内存中的OpenCV图像写入BytesIO或Tempfile对象,以便在其他地方使用 我担心这是一个死胡同,因为Python 将内存中的OpenCV图像写入BytesIO或Tempfile,python,opencv,Python,Opencv,我需要将内存中的OpenCV图像写入BytesIO或Tempfile对象,以便在其他地方使用 我担心这是一个死胡同,因为cv2.imwrite()将文件名作为参数,然后使用文件扩展名推断要写入的图像类型(.jpg,.png,.tiff,等等) Cv2.imWrime](代码>在C++级别,因此我担心没有办法成功地将一个非文件名对象传递给它。 另一种可能的解决方案是通过numpy转换为PIL,它具有写入BytesIO和Tempfile对象的能力,但我希望避免不必要的拷贝。可以帮助您: import
cv2.imwrite()
将文件名作为参数,然后使用文件扩展名推断要写入的图像类型(.jpg
,.png
,.tiff
,等等)<代码> Cv2.imWrime](<)/>代码>在C++级别,因此我担心没有办法成功地将一个非文件名对象传递给它。
另一种可能的解决方案是通过numpy
转换为PIL
,它具有写入BytesIO
和Tempfile
对象的能力,但我希望避免不必要的拷贝。可以帮助您:
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
这可能真的很有帮助。我明天去看看。谢谢