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

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

我问如何以正确的方式从像素中获取真实世界坐标 . 我希望已经清楚了