我正在编写一个基于python的脚本,用于将地理参考信息应用于JPG图像。你知道吗
我已经知道了如何应用纬度、经度和高度,现在正在研究如何应用偏航、俯仰、横滚、水平精度和垂直精度。你知道吗
根据this link,方向和精度数据存储为XMP标记。你知道吗
我为修改XMP数据编写的代码如下所示:
# Reading/Modifying EXIF data
from pyexiv2 import Image
# Converting decimals to Rational
from fractions import Fraction
def convert_rational(value):
return str(Fraction.from_float(value).limit_denominator(100))
def convert_double(value):
return str(float(value))
def modify_xmp_data(photo, yaw, pitch, roll, XY_acc, Z_acc):
xmp_mod_dict = {
'Xmp.Camera.Yaw' : convert_double(yaw),
'Xmp.Camera.Pitch' : convert_double(pitch),
'Xmp.Camera.Roll' : convert_double(roll),
'Xmp.Camera.GPSXYAccuracy' : convert_rational(XY_acc),
'Xmp.Camera.GPSZAccuracy' : convert_rational(Z_acc)
}
i = Image(photo)
i.modify_xmp(xmp_mod_dict)
def print_georeference_data(photo):
i = Image(photo)
xmp_dict = i.read_xmp()
print(photo)
# Print yaw, pitch, roll, XY accuracy, Z accuracy
if 'Xmp.Camera.Yaw' in xmp_dict: print('Xmp.Camera.Yaw : '+ xmp_dict ['Xmp.Camera.Yaw'])
if 'Xmp.Camera.Pitch' in xmp_dict: print('Xmp.Camera.Pitch : '+ xmp_dict ['Xmp.Camera.Pitch'])
if 'Xmp.Camera.Roll' in xmp_dict: print('Xmp.Camera.Roll : '+ xmp_dict ['Xmp.Camera.Roll'])
if 'Xmp.Camera.GPSXYAccuracy' in xmp_dict: print('Xmp.Camera.GPSXYAccuracy : '+ xmp_dict ['Xmp.Camera.GPSXYAccuracy'])
if 'Xmp.Camera.GPSZAccuracy' in xmp_dict: print('Xmp.Camera.GPSZAccuracy : '+ xmp_dict ['Xmp.Camera.GPSZAccuracy'])
# Test photo
photo = "180606_080056_01_01.jpg"
# Modify XMP (yaw, pitch, roll, XY accuracy, Z accuracy)
modify_xmp_data(photo, 72.7942, 1.7943, 2.8909, 5, 10)
# Prints EXIF and XMP geo-reference data
print_georeference_data(photo)
每当试图修改XMP数据时,我都会收到此错误:
RuntimeError: (Caught Exiv2 exception) No namespace info available for XMP prefix `Camera'
调用print_geoference_data(photo)
的预期结果如下所示:
Xmp.Camera.Yaw : 72.7942
Xmp.Camera.Pitch : 1.7943
Xmp.Camera.Roll : 2.8909
Xmp.Camera.GPSXYAccuracy : 5
Xmp.Camera.GPSZAccuracy : 10
目前没有回答
相关问题 更多 >
编程相关推荐