python - OpenCV 消除机器人相机的视角

标签 python opencv image-processing computer-vision robotics

我有一架飞行无人机,配有朝下的摄像头和红外传感器,并且正在为无人机开发 SLAM。无人机只能在平面上飞行。要使用摄像头输入和 opencv 构建无人机环境 map ,您需要从捕获的图像中删除摄像头的视角(由高度、横滚、俯仰和偏航引入),以便图像中的距离准确。

我已经研究过 openCV 的方法,但它们似乎都需要事先校准相机,以便使用脚本确定相机的方向。

如果您知道无人机(和相机)的方向,是否有任何方法可以可靠地变换图像中的点以使间距恒定?我可以从 IMU 获取有关无人机方向的数据。

最佳答案

不幸的是,无人机位置和方向的不准确将导致您建议的方法出现错误。

相机校准是一个烦人的过程,但如果您想要一个黑盒解决方案,这可能是您最好的选择。

但是如果您想尝试一下,请参阅下面我的评论。


您可以应用opencv的扭曲透视功能来尝试消除相机的透视,但请注意,这有几个强有力的假设,可能不是最佳解决方案:

  • 您拥有有关无人机位置的完美信息
  • 您知道摄像头相对于无人机机身的位置
  • 您正在完美平坦的表面上飞行

在本例中,您通过将前两个矩阵相乘来构造 3 个变换矩阵来表示:从地面到无人机的变换、从无人机到相机的变换以及从地面到相机的变换。

T_{地面到相机} = T_{地面到无人机}*T_{无人机到相机}

该矩阵的逆矩阵可用作 warpPerspective 的输入,以将像素转换为地面框架。 This a blog post这很好地解释了函数的输入和输出参数。代码是用 c++ 提供的,但用 python 实现应该相对简单。

关于python - OpenCV 消除机器人相机的视角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51313763/

相关文章:

python - 如何获取单元格的值而不是公式值?

python - 如何使python3.2解释器成为debian中的默认解释器

python - 如何为使用 boto3 导入的 cognito 客户端编写单元测试?

python - PyQt 显示来自 opencv 的视频流

iphone - 如何对 CVImageBufferRef 视频帧进行操作

python - 图中的最大全网格 - python 代码非常慢

c - 将我的应用程序与 Powerpoint 集成

c++ - 如何释放 cvHaarDetectObjects 的内存?

python pytesseract.image_to_string 无法读取图像中的文本

c++ - 如何使用 cv::parallel_for_ 减少执行时间