python 探究is_dir函数及其使用案例(读取人脸图片)附整体代码

定义:检测指定的文件是否是一个目录,如果是则返回TRUE、否则返回FALSE


用法:

>>>type(info)
<class 'zipfile.ZipInfo'>
>>>info.is_dir()
True

读取人脸案例分析

  1. 导入人脸图片的信息库(img_ali.gn_cel.eba.zip
  2. 由于信息库是压缩包,我们需要调用python中的zipfile模块来对压缩包进行解压
  3. 使用read命令来获得文件库中的图片信息
  4. 此时获得的图片信息是以流的形式进行展示的,我们需要使用Numpy中的frombuffer方法,将流数据转换为ndarray对象
  5. 使用cv2中自带的imdecode方法将获得的一维的ndarray转换成三个通过的彩色图片
  6. 显示图片

导入相应的模块

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)

显示如下:
python 探究is_dir函数及其使用案例(读取人脸图片)附整体代码_第1张图片


整体代码如下:

# -*-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)


你可能感兴趣的:(深度学习,机器学习,Python)