使用Python从图像中提取gps坐标
Posted
技术标签:
【中文标题】使用Python从图像中提取gps坐标【英文标题】:Extracting gps coordinates from image using Python 【发布时间】:2020-09-29 05:58:28 【问题描述】:from PIL import Image
from PIL.ExifTags import TAGS
# path to the image or video
imagename = "image.jpg"
# read the image data using PIL
image = Image.open(imagename)
# extract EXIF data
exifdata = image.getexif()
# iterating over all EXIF data fields
for tag_id in exifdata:
# get the tag name, instead of human unreadable tag id
tag = TAGS.get(tag_id, tag_id)
data = exifdata.get(tag_id)
# decode bytes
if isinstance(data, bytes):
data = data.decode()
print(f"tag:25: data")
ExifVersion : 0220 组件配置: 快门速度值 : (1345, 100) 日期时间原始:2020:08:27 09:43:15 日期时间数字化:2020:08:27 09:43:15 光圈值:(185, 100) 亮度值 : (930, 100) ExposureBiasValue : (0, 10) 最大孔径值:(185, 100) 计量模式:2 闪光:0 焦距 : (358, 100) 用户评论: 色彩空间:1 ExifImageWidth : 4128 场景捕捉类型:0 次秒时间:0424 SubsecTime原始:0424 SubsecTimeDigitized : 0424 ExifImageHeight : 1908 图片长度:1908 品牌:三星 型号:SM-M305F 方向:6 YCbCr定位:1 曝光时间:(1, 2786) ExifInteroperabilityOffset:944 XResolution : (72, 1) F号:(190, 100) 场景类型: YResolution : (72, 1) ImageUniqueID : E13LLLI00PM E13LLMK03PA
曝光程序:2 自定义渲染:0 ISOSpeedRatings : 40 分辨率单位:2 曝光模式:0 FlashPix 版本:0100 图像宽度:4128 白平衡:0 软件:M305FDDU5CTF2 日期时间:2020:08:27 09:43:15 数字缩放比率:(0, 0) FocalLengthIn35mmFilm : 27 对比度:0 饱和度:0 锐度:0 ExifOffset : 226 MakerNote : 0100 Z@P
【问题讨论】:
你的问题/问题是什么? 我无法获取坐标点详细信息(图像中的纬度和经度) 这能回答你的问题吗? In Python, how do I read the exif data for an image? 我尝试了同样的方法来获取除纬度和经度坐标以外的其他详细信息 一般来说:在发布您的代码之前-sn-p 描述您遇到的问题。使用代码显示您已经尝试过的内容。这样一来,人们就不会猜测您需要什么帮助。 【参考方案1】:使用模块 piexif (pip install piexif
) 可以在 exif 中获取 GPS 信息,如下所示。
from pprint import pprint
from PIL import Image
import piexif
codec = 'ISO-8859-1' # or latin-1
def exif_to_tag(exif_dict):
exif_tag_dict =
thumbnail = exif_dict.pop('thumbnail')
exif_tag_dict['thumbnail'] = thumbnail.decode(codec)
for ifd in exif_dict:
exif_tag_dict[ifd] =
for tag in exif_dict[ifd]:
try:
element = exif_dict[ifd][tag].decode(codec)
except AttributeError:
element = exif_dict[ifd][tag]
exif_tag_dict[ifd][piexif.TAGS[ifd][tag]["name"]] = element
return exif_tag_dict
def main():
filename = 'IMG_2685.jpg' # obviously one of your own pictures
im = Image.open(filename)
exif_dict = piexif.load(im.info.get('exif'))
exif_dict = exif_to_tag(exif_dict)
pprint(exif_dict['GPS'])
if __name__ == '__main__':
main()
结果
'GPSAltitude': (94549, 14993),
'GPSAltitudeRef': 0,
'GPSDateStamp': '2020:09:04',
'GPSDestBearing': (1061399, 5644),
'GPSDestBearingRef': 'T',
'GPSHPositioningError': (5, 1),
'GPSImgDirection': (1061399, 5644),
'GPSImgDirectionRef': 'T',
'GPSLatitude': ((12, 1), (34, 1), (1816, 100)),
'GPSLatitudeRef': 'N',
'GPSLongitude': ((99, 1), (57, 1), (4108, 100)),
'GPSLongitudeRef': 'E',
'GPSSpeed': (0, 1),
'GPSSpeedRef': 'K',
'GPSTimeStamp': ((13, 1), (2, 1), (4599, 100)),
'GPSVersionID': (2, 2, 0, 0)
exif_to_tag
在这里将 exif 代码转换为更易读的标签。
【讨论】:
TypeError: 'NoneType' 对象不可下标 AttributeError: 'bytes' 对象没有属性 'encode' 你运行的是什么 Python 版本?该代码在 Python 3.7 及更高版本中运行良好。你在哪几行得到错误代码? 我使用的是 3.7.6 版本。在第 30 行和第 31 行中出现 AttributeError 错误:'bytes' 对象没有属性 'encode' 好的,请从函数exif_to_tag
中删除exif_tag_dict['thumbnail'] = thumbnail.decode(codec)
这行,看看它是否运行...以上是关于使用Python从图像中提取gps坐标的主要内容,如果未能解决你的问题,请参考以下文章
Android中QPython的位置不返回GPS坐标 - 仅“网络”