python 快速读取图像宽高信息 |
您所在的位置:网站首页 › 字典的长宽高 › python 快速读取图像宽高信息 |
python 快速读取图像宽高信息
1. 背景2. 方法2.1 仅读取图像文件头部信息2.2 采用特定 python 包读取
1. 背景
存在100w张JPG图像,需要获取它们的宽高信息。如果用普通的 cv2.imread().shape 会非常耗时。 2. 方法 2.1 仅读取图像文件头部信息图像文件的头部信息空间占比小,但包含了图像的基本信息,其中就包括了图像的宽高信息。不同于 cv2 需要读取整个图像文件,该方法只需读取图像头部信息,从而达到加速效果。 JPEG文件头部信息简介 参考自 https://www.cnblogs.com/Dreaming-in-Gottingen/p/14285605.html。主要简单介绍宽高信息相关。
可以看到,在表示“高”之前一共有 163 个字节,我们可以直接读取 164~167 字节后再用 int.from_bytes 转为整型即可。据测速能达到 200iter/s,而用 cv2 方法获取则只有 36iter/s。 import os import os.path as osp from tqdm import tqdm def read_jpg_img_size(path): with open(path, 'rb') as f: f.read(163) h = int.from_bytes(f.read(2), 'big') w = int.from_bytes(f.read(2), 'big') return h, w img_dir = 'path/to/your/image' img_list = os.listdir(img_dir) for img_name in tqdm(img_list): if img_name.endswith('.jpg'): img_path = osp.join(img_dir, img_name) img_size = read_jpg_img_size(img_path) 2.2 采用特定 python 包读取直接用 imagesize 包读取。测速结果为 700iter/s,特别推荐这种方法。其加速原理待有空探究。 import imagesize w, h = imagesize.get("xxx.png") |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |