如何基于matlab相機(jī)標(biāo)定導(dǎo)出xml文件
1 參數(shù)選擇 徑向畸變3個(gè)參數(shù)還是兩個(gè)參數(shù)
默認(rèn)兩個(gè)參數(shù)
如果是三個(gè)參數(shù)
2準(zhǔn)備轉(zhuǎn)化生成結(jié)果
二參數(shù)的轉(zhuǎn)化代碼
writeExternalandIntrinsicMatrix(cameraParams62,'cameraParams622.xml');
function writeExternalandIntrinsicMatrix(cameraParams,file) %writeXML(cameraParams,file) docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage'); docRootNode = docNode.getDocumentElement; IntrinsicMatrix = ((cameraParams.IntrinsicMatrix)'); TangentialDistortion =cameraParams.TangentialDistortion; %Distortion = [cameraParams.RadialDistortion(1:2),TangentialDistortion, cameraParams.RadialDistortion(3)]; Distortion = [cameraParams.RadialDistortion(1:2),TangentialDistortion,0]; FocalLength = cameraParams.FocalLength; camera_matrix = docNode.createElement('IntrinsicCam'); %錕斤拷錕斤拷mat錕節(jié)碉拷 camera_matrix.setAttribute('type_id','opencv-matrix'); %錕斤拷錕斤拷mat錕節(jié)碉拷錕斤拷錕斤拷 rows = docNode.createElement('rows'); %錕斤拷錕斤拷錕叫節(jié)碉拷 rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %錕斤拷錕斤拷錕僥憋拷錕節(jié)點(diǎn),錕斤拷錕斤拷為錕叫碉拷錕接節(jié)碉拷 camera_matrix.appendChild(rows); %錕斤拷錕叫節(jié)碉拷錕斤拷為mat錕接節(jié)碉拷 cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',3))); camera_matrix.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); camera_matrix.appendChild(dt); data = docNode.createElement('data'); for i=1:3 for j=1:3 data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrix(i,j)))); end data.appendChild(docNode.createTextNode(sprintf('\n'))); end camera_matrix.appendChild(data); docRootNode.appendChild(camera_matrix); distortion = docNode.createElement('DistortionCam'); distortion.setAttribute('type_id','opencv-matrix'); rows = docNode.createElement('rows'); rows.appendChild(docNode.createTextNode(sprintf('%d',1))); distortion.appendChild(rows); cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',5))); distortion.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); distortion.appendChild(dt); data = docNode.createElement('data'); for i=1:5 data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i)))); end distortion.appendChild(data); docRootNode.appendChild(distortion); focalLength = docNode.createElement('FocalLength'); focalLength.setAttribute('type_id','opencv-matrix'); rows = docNode.createElement('rows'); rows.appendChild(docNode.createTextNode(sprintf('%d',1))); focalLength.appendChild(rows); cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',1))); focalLength.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); focalLength.appendChild(dt); data = docNode.createElement('data'); for i=1:1 data.appendChild(docNode.createTextNode(sprintf('%.16f ',FocalLength(i)))); end focalLength.appendChild(data); docRootNode.appendChild(focalLength); % distortion = docNode.createElement('Pmatrix'); % distortion.setAttribute('type_id','opencv-matrix'); % rows = docNode.createElement('rows'); % rows.appendChild(docNode.createTextNode(sprintf('%d',1))); % distortion.appendChild(rows); % % cols = docNode.createElement('cols'); % cols.appendChild(docNode.createTextNode(sprintf('%d',4))); % distortion.appendChild(cols); % % dt = docNode.createElement('dt'); % dt.appendChild(docNode.createTextNode('d')); % distortion.appendChild(dt); % data = docNode.createElement('data'); % for i=1:4 % data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i)))); % end % distortion.appendChild(data); % docRootNode.appendChild(distortion); xmlFileName = file; xmlwrite(xmlFileName,docNode); end
二參數(shù)的保存結(jié)果
<?xml version="1.0" encoding="utf-8"?> <opencv_storage> <IntrinsicCam type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data>1558.5669994681102253 0.0000000000000000 821.5211092415044050 0.0000000000000000 1557.8077127262038175 460.9748043702705331 0.0000000000000000 0.0000000000000000 1.0000000000000000 </data> </IntrinsicCam> <DistortionCam type_id="opencv-matrix"> <rows>1</rows> <cols>5</cols> <dt>d</dt> <data>-0.1873006682834817 0.0171597428423078 0.0000000000000000 0.0000000000000000 0.0000000000000000 </data> </DistortionCam> <FocalLength type_id="opencv-matrix"> <rows>1</rows> <cols>1</cols> <dt>d</dt> <data>1558.5669994681102253 </data> </FocalLength> </opencv_storage>
三參數(shù)的轉(zhuǎn)化代碼
function writeXML(cameraParams,file) %writeXML(cameraParams,file) %功能:將相機(jī)校正的參數(shù)保存為xml文件 %輸入: %cameraParams:相機(jī)校正數(shù)據(jù)結(jié)構(gòu) %file:xml文件名 %說(shuō)明在xml文件是由一層層的節(jié)點(diǎn)組成的。 %首先創(chuàng)建父節(jié)點(diǎn) fatherNode, %然后創(chuàng)建子節(jié)點(diǎn) childNode=docNode.createElement(childNodeName), %再將子節(jié)點(diǎn)添加到父節(jié)點(diǎn) fatherNode.appendChild(childNode) docNode = com.mathworks.xml.XMLUtils.createDocument('opencv_storage'); %創(chuàng)建xml文件對(duì)象 docRootNode = docNode.getDocumentElement; %獲取根節(jié)點(diǎn) IntrinsicMatrix = (cameraParams.IntrinsicMatrix)'; %相機(jī)內(nèi)參矩陣 RadialDistortion = cameraParams.RadialDistortion; %相機(jī)徑向畸變參數(shù)向量1*3 TangentialDistortion =cameraParams.TangentialDistortion; %相機(jī)切向畸變向量1*2 Distortion = [RadialDistortion(1:2),TangentialDistortion,RadialDistortion(3)]; %構(gòu)成opencv中的畸變系數(shù)向量[k1,k2,p1,p2,k3] camera_matrix = docNode.createElement('camera-matrix'); %創(chuàng)建mat節(jié)點(diǎn) camera_matrix.setAttribute('type_id','opencv-matrix'); %設(shè)置mat節(jié)點(diǎn)屬性 rows = docNode.createElement('rows'); %創(chuàng)建行節(jié)點(diǎn) rows.appendChild(docNode.createTextNode(sprintf('%d',3))); %創(chuàng)建文本節(jié)點(diǎn),并作為行的子節(jié)點(diǎn) camera_matrix.appendChild(rows); %將行節(jié)點(diǎn)作為mat子節(jié)點(diǎn) cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',3))); camera_matrix.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); camera_matrix.appendChild(dt); data = docNode.createElement('data'); for i=1:3 for j=1:3 data.appendChild(docNode.createTextNode(sprintf('%.16f ',IntrinsicMatrix(i,j)))); end data.appendChild(docNode.createTextNode(sprintf('\n'))); end camera_matrix.appendChild(data); docRootNode.appendChild(camera_matrix); distortion = docNode.createElement('distortion'); distortion.setAttribute('type_id','opencv-matrix'); rows = docNode.createElement('rows'); rows.appendChild(docNode.createTextNode(sprintf('%d',5))); distortion.appendChild(rows); cols = docNode.createElement('cols'); cols.appendChild(docNode.createTextNode(sprintf('%d',1))); distortion.appendChild(cols); dt = docNode.createElement('dt'); dt.appendChild(docNode.createTextNode('d')); distortion.appendChild(dt); data = docNode.createElement('data'); for i=1:5 data.appendChild(docNode.createTextNode(sprintf('%.16f ',Distortion(i)))); end distortion.appendChild(data); docRootNode.appendChild(distortion); xmlFileName = file; xmlwrite(xmlFileName,docNode); end
三參數(shù)的轉(zhuǎn)化保存結(jié)果
<?xml version="1.0" encoding="utf-8"?> <opencv_storage> <camera-matrix type_id="opencv-matrix"> <rows>3</rows> <cols>3</cols> <dt>d</dt> <data>1558.6100144620272658 0.0000000000000000 821.6453269280840459 0.0000000000000000 1557.8120286433929778 460.8682816753835141 0.0000000000000000 0.0000000000000000 1.0000000000000000 </data> </camera-matrix> <distortion type_id="opencv-matrix"> <rows>5</rows> <cols>1</cols> <dt>d</dt> <data>-0.1840928673709393 -0.0328189923757994 0.0000000000000000 0.0000000000000000 0.2205440258401062 </data> </distortion> </opencv_storage>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
通過(guò)python實(shí)現(xiàn)windows桌面截圖代碼實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)windows桌面截圖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Python函數(shù)中的不定長(zhǎng)參數(shù)相關(guān)知識(shí)總結(jié)
今天給大家?guī)?lái)的是關(guān)于Python函數(shù)的相關(guān)知識(shí),文章圍繞著Python不定長(zhǎng)參數(shù)展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Pycharm連接遠(yuǎn)程服務(wù)器并實(shí)現(xiàn)遠(yuǎn)程調(diào)試的實(shí)現(xiàn)
這篇文章主要介紹了Pycharm連接遠(yuǎn)程服務(wù)器并實(shí)現(xiàn)遠(yuǎn)程調(diào)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08matplotlib如何設(shè)置坐標(biāo)軸刻度的個(gè)數(shù)及標(biāo)簽的方法總結(jié)
這里介紹兩種設(shè)置坐標(biāo)軸刻度的方法,一種是利用pyplot提交的api去進(jìn)行設(shè)置,另一種是通過(guò)調(diào)用面向?qū)ο蟮腶pi, 即通過(guò)matplotlib.axes.Axes去設(shè)置,需要的朋友可以參考下2021-06-06Mac更新python3.12?解決pip3安裝報(bào)錯(cuò)問(wèn)題小結(jié)
Mac使用homebrew更新了python3.12,刪除了以前的版本和pip3安裝軟件時(shí)候報(bào)錯(cuò),下面小編給大家分享Mac更新python3.12?解決pip3安裝報(bào)錯(cuò)問(wèn)題,感興趣的朋友跟隨小編一起看看吧2024-05-05Python操作PostgreSql數(shù)據(jù)庫(kù)的方法(基本的增刪改查)
這篇文章主要介紹了Python操作PostgreSql數(shù)據(jù)庫(kù)(基本的增刪改查),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12如何解決pytorch訓(xùn)練過(guò)程中CPU內(nèi)存溢出問(wèn)題
這篇文章主要介紹了如何解決pytorch訓(xùn)練過(guò)程中CPU內(nèi)存溢出問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09