r语言 - 如何批量编辑 jpg EXIF 标头中的字段?



我正忙于一些无人机测绘。但是,图像中的高度值在重复飞行任务(高达120m(之间非常不一致。我用来将无人机图像拼接成正射镶嵌的程序认为无人机正在地下飞行,因为图像高度低于实际地面高程。

为了纠正这个问题,我想通过将实际地面高程和无人机高度之间的差异直接添加到图像的 EXIF 中来批量编辑所有图像的高度值。

例如 原始图像高度 = 250m。编辑的图像高度 = 250m+x

我找到了exiftoolrR软件包,它允许您通过使用独立的ExifTool和Perl程序读取和写入EXIF数据(请参阅此处:https://github.com/JoshOBrien/exiftoolr(

这是我到目前为止的代码:

library(exiftoolr)
#Object containing images in directory
image_files <-dir("D:/....../R/EXIF_Header_Editing/Imagery",full.names=TRUE)
#Reading info
exif_read(image_files, tags = c("filename", "AbsoluteAltitude")) #Only interested in "filename" and "AbsoluteAltitude"
#Saving to new variable
altitude<-list(exif_read(image_files, tags=c("filename","AbsoluteAltitude")))

以下是某些输出的样子:

FileName AbsoluteAltitude
1  DJI_0331.JPG          +262.67
2  DJI_0332.JPG          +262.37
3  DJI_0333.JPG          +262.47
4  DJI_0334.JPG          +262.57
5  DJI_0335.JPG          +262.47
6  DJI_0336.JPG          +262.57
ext.

我知道需要将x添加到列表中的每个"绝对高度"条目中,然后用这个新调整的高度值覆盖现有的图像高度值,而无需编辑任何其他重要的EXIF信息。

有什么想法吗?

我有一个程序可以让我批量编辑 EXIF 高度,但这会使所有数值都相同,我需要保持值之间的差异。

提前致谢

只是@StarGeek答案的后续。我设法找出了R等价物。这是我的解决方案:


#Installing package from GitHub
if(!require(devtools)) {install.packages("devtools")}
devtools::install_github("JoshOBrien/exiftoolr",force = TRUE)
#Installing/updating ExifTool program into exiftoolr directory
exiftoolr::install_exiftool()
#Loading packages
library(exiftoolr)
#Set working directory
setwd("D:/..../R/EXIF_Header_Editing")
#Object containing images
image_files <- dir("D:/..../R/EXIF_Header_Editing/Imagery",full.names = TRUE)
#Editing "GPSAltitude" by adding 500m to Altitude value
exif_call(args = "-GPSAltitude+=500", path = image_files)

打开.jpg属性时,将显示调整后的高度。

感谢星际极客

如果你愿意尝试只使用 exiftool,你可以试试这个命令:
exiftool -AbsoluteAltitude+=250 <DIRECTORY>

我首先会在您文件的几个副本上对其进行测试,看看它是否适合您的需求。

最新更新