基於EmguCV(3.4.3)的相機標定、畸變校準

本文主要介紹基於EmguCV(3.4.3)的相機標定簡單函數使用。

首先感謝這兩位博主對我思路的指引,十分感謝!

https://blog.csdn.net/Kano365/article/details/90721424
https://blog.csdn.net/sinat_33442459/article/details/79861762

自EmguCV3.0之後,Emgu.CV的DLL引用就換成了—Emgu.CV.World。
以下就是我
在相機標定中,存在兩個關鍵矩陣:相機內參矩陣、相機畸變參數矩陣。這兩個矩陣的參數決定了相機校準的質量。(可以參考以上二位的博文)。

現實校準應用中我們不可能每次都計算求解校準矩陣以及參數,所以通常的做法是把校準參數以文件的形式保存下來,每次校準的時候讀取校準文件即可。但我在接觸EmguCV的函數後發現,它僅僅包括了將Mat數據輸出保存的函數,並未包括讀取相關文件並對Mat矩陣賦值的便捷函數。

保存與讀取函數

FileStorage storage_came = new FileStorage(@matrix_path + "//" + "cameraMatrix.txt", FileStorage.Mode.Write);//路徑不能出現中文名字。。。。。
storage_came.Write(cameraMatrix);
storage_came.ReleaseAndGetString();
-------------------------------------------------------------
以下是讀取以及修改Mat矩陣參數的函數,如何使用大家可以參考文章末尾的博文連接!

 FileStream filereader = new FileStream((@matrix_path + "//" + "cameraMatrix.txt"), FileMode.Open, FileAccess.Read);
StreamReader streamReader = new StreamReader(filereader);
CamerMatrix_value = streamReader.ReadToEnd();
CamerMatrix_start_index = CamerMatrix_value.IndexOf("[");
CamerMatrix_end_index = CamerMatrix_value.IndexOf("]");
CamerMatrix_value = CamerMatrix_value.Substring(CamerMatrix_start_index + 1, CamerMatrix_end_index - CamerMatrix_start_index - 1);
CamerMatrix_value = CamerMatrix_value.Replace("\r\n", "");
 ------------------------------------------------------
Mat cameraMatrix_T = new Mat(3, 3, DepthType.Cv64F, 1);//相機內參矩陣
Mat distCoeffs_T = new Mat(1, 5, DepthType.Cv64F, 1);//相機5個畸變參數
string[] A = new string[9];
string[] B = new string[15];
char[] separator = { ',' };////需要空空格代替回車換行
A = CamerMatrix_value.Split(separator);
B = distCoeffs_value.Split(separator);
for (int i = 0; i < 3; i++)
{ 
   for (int y = 0; y < 3; y++)
     {
      MatExtension.SetValue(cameraMatrix_T, i, y, Convert.ToDouble(A[k]));
                    k++;
     }
}


 

程序的初始界面:
主界面程序運行的界面:
在這裏插入圖片描述關於校準文件的讀取函數,大家可以參考這位博主的博文,寫的很好,可惜我都沒仔細的看。

整個程序的校準功能只是原理性的驗證了,實際的效果如何還沒有測試,所以,請忽略界面上兩張圖的對比!

https://blog.csdn.net/Zythonista/article/details/103889756

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章