Python 如何从可以传递到OpenCV的ZipFile对象中获取路径?
我想将图像文件传递到OpenCV中,以便在不解压缩的情况下创建一个NumPy数组 我的代码如下所示: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
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
----------------------------------------