我想使用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
可以完美地找到。但是,由于第二张打印不打印任何内容,因此无法将SpooledTemporaryFile
与opencv一起使用。有什么想法会忽略SpooledTemporaryFile
的prefix参数吗?
答案 0 :(得分:1)
问题是磁盘上没有假脱机文件(例如SpooledTemporaryFile
),因此它也没有名称。
但是,请注意cv2.imread()
将以文件名作为参数,这意味着它将处理文件的打开并且不支持假脱机文件。
如果您仅使用png
图像,则不会对其进行编码,这意味着变量img
已在内存中包含图像数据,您无需执行其他任何操作,只需调用{ {1}}要保存到磁盘上时。如果要使用临时文件,则必须为cv2.imwrite()
。
如果要处理内存中的编码图像格式,例如NamedTemporaryFile
,则可以像在this answer中那样使用jpg
。