定義:檢測指定的文件是否是一個目錄,如果是則返回TRUE、否則返回FALSE
用法:
>>>type(info)
<class 'zipfile.ZipInfo'>
>>>info.is_dir()
True
讀取人臉案例分析
- 導入人臉圖片的信息庫(
img_ali.gn_cel.eba.zip
) - 由於信息庫是壓縮包,我們需要調用python中的
zipfile
模塊來對壓縮包進行解壓 - 使用
read
命令來獲得文件庫中的圖片信息 - 此時獲得的圖片信息是以流的形式進行展示的,我們需要使用Numpy中的
frombuffer
方法,將流數據轉換爲ndarray
對象 - 使用cv2中自帶的
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)