You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PIL获取EXIF焦距报错:'IFDRational'对象不支持索引的咨询

问题描述

我在运行Medium平台上《Stereo 3D Reconstruction with OpenCV Using an iPhone Camera Part II》一文的图像3D重建示例时,按照文中代码提取图像EXIF焦距出现报错。

原代码:

exif_data = {
 PIL.ExifTags.TAGS[k]:v
 for k, v in exif_img._getexif().items()
 if k in PIL.ExifTags.TAGS}

# 获取元组形式的焦距
focal_length_exif = exif_data['FocalLength']

# 获取十进制形式的焦距
focal_length = focal_length_exif[0]/focal_length_exif[1]

报错提示:'IFDRational' object does not support indexing

观察到focal_length_exif是IFDRational类型的结构,想询问是否可以通过focal_length = focal_length_exif.real来获取399/100的数值?

解决方案

不推荐用.real属性,它是复数类型的属性,用来获取实部,并非IFDRational类型的标准用法。更可靠的方式有两种:

  • 直接用float()方法转换为十进制数值:

    focal_length = float(focal_length_exif)
    
  • 访问IFDRational对象的numerator(分子)和denominator(分母)属性手动计算:

    focal_length = focal_length_exif.numerator / focal_length_exif.denominator
    

这两种方法都能准确得到你需要的399/100对应的十进制数值。


内容的提问来源于stack exchange,提问作者Lake_Lagunita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:36:29