iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
0
自我挑戰組

我的影像視覺定位學習筆記系列 第 20

day20-讀入實驗影像與相機參數

  • 分享至 

  • xImage
  •  

本日嘗試把實驗影像讀入的方式改寫成校正範例
以一個xml裡面寫上影像清單

<?xml version="1.0"?>
<opencv_storage>
<imagelist>
  Photos/IMAG0568.jpg
  Photos/IMAG0569.jpg
</imagelist>
</opencv_storage>

將連續影像的相對位置塞成std::vector<std::string>
這個部分的改寫還算簡單
只要將單目校正的範例從中將讀影像清單的部分改寫就好

而到了要讀入相機參數的時候,就要面對XML的格式了.........
這邊暫時拿某次校準再投影比較小的設定檔做實驗,
我還沒有研究出為什麼這次校正的再投影誤差比較小的原因......

<?xml version="1.0"?>
<opencv_storage>
<calibration_time>"Sat Oct  5 22:32:33 2019"</calibration_time>
<camera_matrix type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    4.7078931752964917e+02 0. 320. 0. 4.7078931752964917e+02 240. 0. 0.
    1.</data></camera_matrix>
<distortion_coefficients type_id="opencv-matrix">
  <rows>5</rows>
  <cols>1</cols>
  <dt>d</dt>
  <data>
    1.2951515083696105e-01 -4.2137869135962597e-01 0. 0.
    4.2134930322994174e-01</data></distortion_coefficients>
</opencv_storage>

一個XML基本上是一個fileStorage檔案的儲存模式

cv::FileStorage fs(filename, cv::FileStorage::READ);

而裡面會有很多FileNode

static bool readcamera(const std::string& filename,cv::Mat&camerMatrix,cv::Mat&disco)
{
    cv::FileStorage fs(filename, cv::FileStorage::READ);
    if (!fs.isOpened())
        return false;
    fs["camera_matrix"]>> camerMatrix;
    fs["distortion_coefficients"]>> disco;

    return true;
}

fs["camera_matrix"]我們直接將這個Node 指派到程式裡面的cv::Mat camerMatrix
似乎他就會自動將這個Mat 變成一個3X3的矩陣形式
而distortion_coefficients同理就會指派為一個 5X1的畸變參數形式

std::cout << cameraMatrix<< std::endl;
std::cout<< distortion_coefficients << std::endl;

https://ithelp.ithome.com.tw/upload/images/20191006/2012112794iZ986DZq.png


上一篇
day19-Camera calibration [實戰心得筆記?]
下一篇
day21-Camera calibration[再次挑戰心得筆記]
系列文
我的影像視覺定位學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言