如何在opencv中使用相机校准来测量像素的真实世界坐标

时间:2015-03-09 16:24:40

标签: c++ opencv image-processing camera camera-calibration

我已经阅读了主题

的3本书
  • 实用OpenCV - Smarth Brahmbhat
  • 学习OpenCV - O'Reilly
  • OpenCV 2计算机视觉应用编程手册 - RobertLaganière

我已经完成了校准过程,校准后我得到了所有的返回参数,例如:

  • 相机矩阵
  • 失真系数
  • 外在参数

我运行了一个程序来获取这些数据。该程序位于OpenCV教程的“calib3d模块。摄像机校准和3D重建”部分

我将描述这个过程,我把一个固定的摄像头放在镜头前寻找地板和棋盘。我拿了15张棋盘的图片移动它,最后一张图片是棋盘在地板上,倾斜度为0º。

有几本书谈论使用这个公式将真实的单词坐标转换为像素。

Formula to get pixels from real word coordinates https://www.dropbox.com/s/o77drhopfqgqju6/Captura%20de%20pantalla%20de%202015-03-09%2010%3A44%3A52.png

平移和旋转矩阵是3行x 4列,但外部参数是15行x 6列,每张照片一个。我用了最后一排。我已经阅读并发现3个第一个cols对应于旋转系数,最后3个cols对应于平移系数但是旋转矩阵是3x3所以我使用函数 cv :: Rodrigues 将其转换为3x3,我把它放在cv :: Rodrigues返回的cv :: Mat旁边的一个col(我从学习OpenCV - O'Reilly 中读到)。

所以,我需要像素到真实世界坐标,而不是向后。因此我应用了Cramer Rule来获得X和Y,但是它返回了我的感测点,就像现实世界中的0,0像素是-4,-3一样。

我在问如何以正确的方式从像素中获取真实世界坐标。我希望很清楚

0 个答案:

没有答案