Python 如何从可以传递到OpenCV的ZipFile对象中获取路径?

Python 如何从可以传递到OpenCV的ZipFile对象中获取路径?,python,opencv,zipfile,Python,Opencv,Zipfile,我想将图像文件传递到OpenCV中,以便在不解压缩的情况下创建一个NumPy数组 我的代码如下所示: zip_file = r'D:\Folder\small_img.zip' with zipfile.ZipFile(zip_file) as zip: for info in zip.infolist(): path_to_image = os.path.abspath(info.filename) zip_img = zip.open(info.fi

我想将图像文件传递到OpenCV中,以便在不解压缩的情况下创建一个NumPy数组

我的代码如下所示:

zip_file = r'D:\Folder\small_img.zip'

with zipfile.ZipFile(zip_file) as zip:
    for info in zip.infolist():
        path_to_image = os.path.abspath(info.filename)
        zip_img = zip.open(info.filename)
        pil_img = Image.open(zip_img).convert('RGB')
        # cv_img = cv.imread(*)
我放
*
的地方是我不确定要传递什么的地方。我已经创建了一些枕头类变量
Image
pil\u img
)和
zipfilext
zip\u img
)。我知道
cv2.imread
只接受路径。因此,我尝试传入一个路径名,但是我没有解压缩zip文件,因此我还尝试创建一个绝对路径(
path\u to\u image
),看起来像(
'D:\Folder\File1.jpg'
),以及一个文件名(
info.filename
),看起来像(
File1.jpg

但是,它们中的大多数都会显示错误消息:

TypeError:无法将“Image”类型的对象转换为“filename”的“str”

TypeError:无法将'ZipExtFile'类型的对象转换为'filename'的'str'
或者,如果我将
path\u传递到图像
info.filename
,它将返回
None

任何人都知道我可以将什么传递到
cv2.imread
以获得NumPy阵列吗?

为此目的:

导入cv2
将numpy作为np导入
进口拉链
zipfile.zipfile('images.zip')作为zf:
对于zf.infolist()中的信息:
zip_img=zf.open(info.filename)
cv_img=cv2.imdecode(np.frombuffer(zip_img.read(),dtype=np.uint8),
cv2.IMREAD(未更改)
在从获取的
ZipExtFile
对象上,可以调用以获取原始字节。然后需要为
cv2.imdecode
获取正确的输入

如果您(还)需要枕头
图像
对象,您也可以简单地将该对象转换为某个NumPy数组,但必须记住,要纠正从RGB(枕头)到BGR(OpenCV)的顺序:

导入cv2
将numpy作为np导入
从PIL导入图像
进口拉链
zipfile.zipfile('images.zip')作为zf:
对于zf.infolist()中的信息:
zip_img=zf.open(info.filename)
pil\u img=Image.open(zip\u img)
cv_img=cv2.cvtColor(np.array(pil_img),cv2.COLOR\u RGB2BGR)
----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.19041-SP0
Python:3.9.1
PyCharm:2021.1.1
NumPy:1.20.2
OpenCV:4.5.1
枕头:8.2.0
----------------------------------------