当前位置:   article > 正文

小白深度学习起步中——读取人像图像_cv2.imdecode(img, 1)

cv2.imdecode(img, 1)

人脸图像读取

  1. 首先,先调用三个库
	import numpy as np
	import cv2
	import zipfile
  • 1
  • 2
  • 3
  1. 然后确定一下主程序,搞清楚我们这个程序的目的。是为了从解压解压上读取图像。
	 if __name__ == '__main__':
	    path = 'D:\\DeepBlue\\samples\\celeba\\Eval\\Img\\img_ali.gn_cel.eba.zip'  # 解压路径
	    ca = CelebA()
	    cv2.imshow(ca.imgs[1000])
	    cv2.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 然后定义一个类CelebA,在构造方法里 ,定义imgs。
class CelebA:
				    def __init__(self,path):
				        self.imgs = []
  • 1
  • 2
  • 3
'
运行
  1. 紧接着放一个with语句对zipfile.ZipFile(path)做一个抛出异常操作,并将zipfile.ZipFile(path)命名为zf(zipfile.ZipFile(path)就是openc中解压文件的方法)
 with zipfile.ZipFile(path) as zf:  # 解压文件
  • 1
  1. 用is_dir函数判断info文件否是文件夹,如果是就跳过。
for info in zf.filelist:
        if info.is_dir(): continue # is_die(检查是否是目录)————>bool
  • 1
  • 2
  1. 首先从我们的filename中提取出流数据,并转化成uint8数据,最后对uint8数据进行解码使其形成图片
img = zf.read(info.filename)
img = np.frombuffer(img, np.uint8)  # frombuffer 收集数据,uint8:将收集的数据转制为八位的数组
img = cv2.imdecode(img, 1)  # cv2.imdecode:解码成图,1是彩图,2是灰度图
  • 1
  • 2
  • 3
  1. 然后找出名字并将图像存储到imgs列表中
 name = info.filename[info.filename.rfind('/')+1:]
 self.imgs.append(img)
  • 1
  • 2
  1. 因为不断地输出名字会显得很杂乱无章,所以这里我们让他每完成10000组图像的读取进行一次说明
  if len(self.imgs) % 10000 == 0:
  	print('Read %d imgs' % len(self.imgs))
  • 1
  • 2
  1. 最后输出完成语句
 
print('Read %d imgs from %s successfully!' % (len(self.imgs),path),flush=True)          #flush参数主要是刷新, 默认flush = False,不刷新,True则反之
  • 1
  • 2

完整代码:

import zipfile
import numpy as np
import cv2
class CelebA:
    def __init__(self,path):
        self.imgs = []

        with zipfile.ZipFile(path) as zf:  # 解压文件
            for info in zf.filelist:
                if info.is_dir(): continue# is_die(检查是否是目录)————>bool
                img = zf.read(info.filename)
                img = np.frombuffer(img, np.uint8)  # frombuffer 收集数据,uint8:将收集的数据转制为八位的数组
                img = cv2.imdecode(img, 1)  # cv2.imdecode:解码成图,1是彩图,2是灰度图
                name = info.filename[info.filename.rfind('/')+1:]
                self.imgs.append(img)
                if len(self.imgs) % 10000 == 0:
                    print('Read %d imgs' % len(self.imgs))

                print('Read %d imgs from %s successfully!' % (len(self.imgs),path),flush=True)          #flush参数主要是刷新, 默认flush = False,不刷新,True则反之。



if __name__ == '__main__':
    path = 'D:\\DeepBlue\\samples\\celeba\\Eval\\Img\\img_ali.gn_cel.eba.zip'  # 解压路径
    ca = CelebA()
    cv2.imshow(ca.imgs[1000])
    cv2.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

结果如图:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/888082
推荐阅读
相关标签
  

闽ICP备14008679号