Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将内存中的OpenCV图像写入BytesIO或Tempfile_Python_Opencv - Fatal编程技术网

Python 将内存中的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

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

我担心这是一个死胡同,因为
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

这可能真的很有帮助。我明天去看看。谢谢