定义:检测指定的文件是否是一个目录,如果是则返回TRUE、否则返回FALSE
用法:
>>>type(info)
<class 'zipfile.ZipInfo'>
>>>info.is_dir()
True
读取人脸案例分析
img_ali.gn_cel.eba.zip
)zipfile
模块来对压缩包进行解压read
命令来获得文件库中的图片信息frombuffer
方法,将流数据转换为ndarray
对象imdecode
方法将获得的一维的ndarray
转换成三个通过的彩色图片导入相应的模块
import zipfile
import numpy as np # Numpy
import cv2 # OpenCV
获得图片的相对路径:
path = "..\\dl_data\\samples\\Img\\img_ali.gn_cel.eba.zip"
对文件夹进行解压(这里使用with…as…的用法。该用法稍后解释):
with zipfile.ZipFile(path) as zf:
开始遍历解压后的文件列表
for info in zf.filelist:
判断获得的info
是否是目录,如果是目录则退出遍历
if info.is_dir(): continue
读取图片的流信息
img = zf.read(info.filename)
此时获得的图片信息如下:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01...
将获得的流信息转换成ndarray
对象
img = np.frombuffer(img, np.uint8)
此时图片的信息如下:
array([255, 216, 255, ..., 71, 255, 217], dtype=uint8)
由于此时的图片是1维的需要通过OpenCV进行解码
img = cv2.imdecode(img,1)
最终得到的图片如下:
array([[[194, 231, 253],
[194, 231, 253],
[194, 231, 253],
...,
[216, 228, 246],
[223, 237, 255],
[222, 238, 254]],
[[194, 231, 253],
[194, 231, 253],
[194, 231, 253],
...,
[218, 230, 248],
[223, 237, 255],
[222, 238, 254]],
[[194, 231, 253],
[194, 231, 253],
[194, 231, 253],
...,
[220, 232, 250],
[224, 238, 255],
[223, 239, 255]],
...,
[[ 26, 74, 140],
[ 1, 49, 115],
[ 33, 78, 146],
...,
[ 28, 55, 122],
[ 30, 56, 123],
[ 30, 56, 122]],
[[ 15, 62, 130],
[ 23, 70, 138],
[ 53, 98, 166],
...,
[ 20, 49, 118],
[ 24, 50, 120],
[ 24, 51, 118]],
[[ 53, 100, 168],
[ 89, 136, 204],
[132, 177, 245],
...,
[ 20, 49, 118],
[ 24, 50, 120],
[ 24, 50, 120]]], dtype=uint8)
显示图片:
cv2.imshow("img1", img)
cv2.waitKey(0)
整体代码如下:
# -*-coding:utf-8-*-
import zipfile
import numpy as np
import cv2
if __name__ == '__main__':
path = "E:\\dl_data\\samples\\Img\\img_ali.gn_cel.eba.zip"
with zipfile.ZipFile(path) as zf:
for info in zf.filelist:
if info.is_dir(): continue
print(info)
img = zf.read(info.filename)
img = np.frombuffer(img, np.uint8)
img = cv2.imdecode(img,1)
cv2.imshow("img1", img)
cv2.waitKey(2000)