概述
前言:项目需要直接读取大疆无人机JPG的位置和云台信息,对网上现有代码进行注释和个人解读
JPG作为复杂的图像数据很多人都知道存在一个叫做EXIF的数据规范,
在这个数据规范中,包含了相机数据、拍摄数据、厂家信息以及GPS信息这样很多个数据信息,其中已经有GPS信息,当然,这是按照EXIF信息元的标准来写入的,查相关资料还是比较充分,整个这个部分总体的概念就是一个像二叉树又不像二叉树的链表,从前到后整体是顺序存储的读取图片的EXIF,得到EXIF标签(dict类型)
代码及备注
b = b"x3cx2fx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex3e" a = b"x3cx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex20" aa=["x3cx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex20"] bb=["x3cx2fx72x64x66x3ax44x65x73x63x72x69x70x74x69x6fx6ex3e"] #xml format to save EXIF的数据规范 # aa ['<rdf:Description '] print("aa",aa) # bb ['</rdf:Description>'] print("bb",bb) # rb是读取二进制文件 img = open("DJI_202207301342_003/DJI_20220730141505_0001.JPG", 'rb') # bytearray() 方法返回一个新字节数组 data = bytearray() #标识符, flag = False for i in img.readlines(): # 按行读取二进制信息,标签成对出现 if a in i: flag = True if flag: #把第i行数据复制到新数组中 data += i if b in i: break print("data",data) if len(data) > 0: data = str(data.decode('ascii')) print(data) #filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表。 #filter(function,iterable) ,function -- 判断函数。iterable -- 可迭代对象 #python允许用lambda关键字创造匿名函数。 # 在 lambda 关键字之后、冒号左边为参数列表,可不带参数,也可有多个参数。若有多个参数,则参数间用逗号隔开,冒号右边为 lambda 表达式的返回值。 #left--->right # judge condition 'drone-dji:' in x lines = list(filter(lambda x: 'drone-dji:' in x, data.split("n"))) print("lines",lines) dj_data_dict = {} for d in lines: # remove 'drone-dji:' d = d.strip()[10:] # k is name # v is value k, v = d.split("=") print(f"{k} : {v}") dj_data_dict[k] = v
结果
Version : "1.4"
GpsStatus : "RTK"
AltitudeType : "RtkAlt"
GpsLatitude : "+27.137487969"
GpsLongitude : "+102.926637049"
AbsoluteAltitude : "+1546.755"
RelativeAltitude : "+684.239"
GimbalRollDegree : "+180.00"
GimbalYawDegree : "-7.00"
GimbalPitchDegree : "-89.90"
FlightRollDegree : "-0.40"
FlightYawDegree : "+173.30"
FlightPitchDegree : "+13.70"
FlightXSpeed : "-0.3"
FlightYSpeed : "0.0"
FlightZSpeed : "-0.1"
CamReverse : "0"
GimbalReverse : "0"
SelfData : ""
RtkFlag : "50"
RtkStdLon : "0.01420"
RtkStdLat : "0.01224"
RtkStdHgt : "0.07425"
RtkDiffAge : "2.00000"
SurveyingMode : "1"
UTCAtExposure : "2022-07-30T06:15:26.334846"
ShutterType : "Mechanical"
ShutterCount : "100708"
CameraSerialNumber : "3XMDJBS001Y205"
LensSerialNumber : "01JY113G039P"
DroneModel : "Matrice 300 RTK"
DroneSerialNumber : "1ZNBJAB00C00MC"
最后
以上就是要减肥硬币为你收集整理的Python大疆相片/航片/照片的内容信息获取:以m300为例JPG的全部内容,希望文章能够帮你解决Python大疆相片/航片/照片的内容信息获取:以m300为例JPG所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复