我正在使用opencv和python我已经校准了具有以下参数的相机:
camera_matrix=[[ 532.80990646 ,0.0,342.49522219],[0.0,532.93344713,233.88792491],[0.0,0.0,1.0]] dist_coeff = [-2.81325798e-01,2.91150014e-02,1.21234399e-03,-1.40823665e-04,1.54861424e-01]
我在python中工作.我编写了以下代码将上述内容保存到文件中,但文件就像一个普通的文本文件.
f = open("../calibration_camera.xml","w") f.write('Camera Matrix:\n'+str(camera_matrix)) f.write('\n') f.write('Distortion Coefficients:\n'+str(dist_coefs)) f.write('\n') f.close()
如何使用python命令将此数据保存到xml/yaml文件中,从而获得所需的输出.请帮助.提前致谢
在您的情况下,JSON似乎是最简单的序列化格式
camera_matrix=[[ 532.80990646 ,0.0,342.49522219],[0.0,532.93344713,233.88792491],[0.0,0.0,1.0]] dist_coeff = [-2.81325798e-01,2.91150014e-02,1.21234399e-03,-1.40823665e-04,1.54861424e-01] data = {"camera_matrix": camera_matrix, "dist_coeff": dist_coeff} fname = "data.json" import json with open(fname, "w") as f: json.dump(data, f)
data.json:
{"dist_coeff": [-0.281325798, 0.0291150014, 0.00121234399, -0.000140823665, 0.154861424], "camera_matrix": [[532.80990646, 0.0, 342.49522219], [0.0, 532.93344713, 233.88792491], [0.0, 0.0, 1.0]]}
如果您希望人工编辑内容,YAML是最佳选择
与json
模块不同,yaml
它不是Python的一部分,必须先安装:
$ pip install pyyaml
这里是保存数据的代码:
fname = "data.yaml" import yaml with open(fname, "w") as f: yaml.dump(data, f)
data.yaml:
camera_matrix: - [532.80990646, 0.0, 342.49522219] - [0.0, 532.93344713, 233.88792491] - [0.0, 0.0, 1.0] dist_coeff: [-0.281325798, 0.0291150014, 0.00121234399, -0.000140823665, 0.154861424]
我的例子是使用我最喜欢的lxml
包,也可以使用其他XML包.
from lxml import etree from lxml.builder import E camera_matrix=[[ 532.80990646 ,0.0,342.49522219],[0.0,532.93344713,233.88792491],[0.0,0.0,1.0]] dist_coeff = [-2.81325798e-01,2.91150014e-02,1.21234399e-03,-1.40823665e-04,1.54861424e-01] def triada(itm): a, b, c = itm return E.Triada(a = str(a), b = str(b), c = str(c)) camera_matrix_xml = E.CameraMatrix(*map(triada, camera_matrix)) dist_coeff_xml = E.DistCoef(*map(E.Coef, map(str, dist_coeff))) xmldoc = E.CameraData(camera_matrix_xml, dist_coeff_xml) fname = "data.xml" with open(fname, "w") as f: f.write(etree.tostring(xmldoc, pretty_print=True))
data.xml中:
<CameraData> <CameraMatrix> <Triada a="532.80990646" c="342.49522219" b="0.0"/> <Triada a="0.0" c="233.88792491" b="532.93344713"/> <Triada a="0.0" c="1.0" b="0.0"/> </CameraMatrix> <DistCoef> <Coef>-0.281325798</Coef> <Coef>0.0291150014</Coef> <Coef>0.00121234399</Coef> <Coef>-0.000140823665</Coef> <Coef>0.154861424</Coef> </DistCoef> </CameraData>
您应该使用代码进行一些操作,以便以适当的精度格式化表示数字的字符串.我留给你了.