python 快速读取图像宽高信息

您所在的位置:网站首页 字典的长宽高 python 快速读取图像宽高信息

python 快速读取图像宽高信息

2023-12-19 19:34| 来源: 网络整理| 查看: 265

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。主要简单介绍宽高信息相关。

在这里插入图片描述 上图展示的是 JPEG 格式图片的头部信息。其中以 0xFFC0 开头的是 SOF 字段,里面包含了宽高信息。在之后的二进制信息中:

0x0011 表示当前字段一共有 17 字节;0x08 表示 8 位采样精度;0x02D0 和 0x03E0 分别表示图像的高和宽为 720 和 992。

可以看到,在表示“高”之前一共有 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