Python: SpooledTemporaryFile 后缀无效

Python: SpooledTemporaryFile suffix not working

我想使用 opencv 将图像写入临时文件,获取该临时文件的路径并将该路径传递给函数。

import cv2 as cv
from tempfile import NamedTemporaryFile, SpooledTemporaryFile

img = create_my_awesome_image()

with NamedTemporaryFile(suffix=".png") as temp:
    print(temp.name)
    cv.imwrite(temp.name, img) # this one sparks joy

with SpooledTemporaryFile(max_size=1000000, suffix=".png") as temp:
    print(temp.name)
    cv.imwrite(temp.name, img) # this one does not

第一次打印打印 C:\Users\FLORIA~1\AppData\Local\Temp\tmpl2i6nc47.png.
第二次打印时:None.

使用NamedTemporaryFile 可以完美找到。但是,因为第二个打印打印 None,我不能将 SpooledTemporaryFile 与 opencv 一起使用。知道为什么 SpooledTemporaryFile 的前缀参数被忽略了吗?

问题是磁盘上不存在假脱机文件(例如 SpooledTemporaryFile),因此它也没有名称。

但是,请注意 cv2.imread() 会将文件名作为参数,这意味着它将处理文件打开并且不支持假脱机文件。

如果您只处理 png 图像,它们不会被编码,这意味着变量 img 已经包含内存中的图像数据,您无需做任何其他事情,只需当你想将它保存到磁盘时调用 cv2.imwrite() 。如果要使用临时文件,它必须是 NamedTemporaryFile.

如果你想在内存中处理编码图像格式,例如 jpg,你可以使用 cv2.imencode() 来达到这个目的,如 .