【发布时间】:2014-04-12 22:58:15
【问题描述】:
我在互联网上看到了很多关于如何使用 openCV 进行相机 + 投影仪校准的博客文章和视频以及源代码,以生成 camera.yml、projector.yml 和 projectorExtrinsics.yml 文件。
我还没有看到有人讨论之后如何处理这些文件。确实,我自己已经进行了校准,但我不知道我自己的应用程序的下一步是什么。
假设我编写了一个应用程序,该应用程序现在使用相机 - 我校准的投影仪系统来跟踪对象并在其上投影某些东西。我将使用 contourFind() 从移动对象中获取一些兴趣点,现在我想将这些点(从投影仪!)投影到对象上!
我想要做的是(例如)跟踪对象的质心 (COM) 并在被跟踪对象的相机视图上显示一个点(在其 COM 处)。然后应该在对象的 COM 上实时投影一个点。
似乎projectPoints() 是我在加载 yml 文件后应该使用的 openCV 函数,但我不确定如何解释相机和投影仪的所有内在和外在校准值。即,projectPoints() 需要
- 要重新投影的点向量(呵呵!)
- 旋转+平移矩阵。我想我可以在这里使用projectorExtrinsics。或者我可以使用 composeRT() 函数从projectorExtrinsics(我在yml文件中有)和cameraExtrinsics(我没有)生成最终旋转和最终平移矩阵。附带问题:我应该不保存它们也在文件中??)。
- 内在矩阵。现在这很棘手。我应该在这里使用相机还是投影仪内在矩阵?
- 失真系数。我应该再次在这里使用投影仪还是相机系数?
- 其他参数...
因此,如果我在projectPoints() 中使用投影仪或相机(哪一个??)内在函数 + 系数,那么我只会对 2 种仪器中的一种进行“校正”。我将在哪里/如何使用其他仪器的内在函数??
除了 load() yml 文件和 projectPoints() 之外,我还需要使用什么? (也许不失真?)
非常感谢您对此事的任何帮助。 如果有教程或书籍(不,O'Reilly “Learning openCV” 也没有谈论如何使用校准 yml 文件! - 只是关于如何进行实际校准),请指点我那个方向。我不一定需要一个确切的答案!
【问题讨论】:
-
超级好问题。你能把你提到的一些关于如何找到
projectorExtrinsics.yml的教程链接给我吗?
标签: c++ opencv camera projection