OpenCV:4个相机Bird's Eye view?

时间:2016-06-02 21:24:53

标签: python opencv computer-vision perspectivecamera

我在考虑如何制作像seen in luxury cars这样的四只相机鸟眼视图时遇到了很多麻烦。以下是我将用作此问题示例的原文... enter image description here

现在,我已经使用.getPerspectiveTransform使图像偏斜,但这仅适用于一张图片。

enter image description here

我显然需要四个并且对如何将这些图像拼接在一起毫无头绪。如果图像看起来像这样,我也很无能为力。这是我目前的代码:

import cv2 as cv
import numpy as np

img1 = cv.imread("testBird.jpg", cv.IMREAD_COLOR)
image = np.zeros((700, 700, 3), np.uint8)
src = np.array([[0,200],[480,200],[480,360],[0,360]],np.float32)
dst = np.array([[0,0],[480,0],[300,360],[180,360]],np.float32)

M = cv.getPerspectiveTransform(src, dst)
warp = cv.warpPerspective(img1.copy(), M, (480, 360))
cv.imshow('transform', warp)
cv.waitKey(0)
cv.destroyAllWindows()

这是我大概想要的最终图像(朋友用Photoshop放在一起)......

enter image description here

1 个答案:

答案 0 :(得分:4)

要实现转换,您需要参考getPerspectiveTransform函数。需要:

  • src:源图像中四边形顶点的坐标。
  • dst:目标图像中相应四边形顶点的坐标。

    我认为定义“src”和“dst”不是一个容易的问题。它需要一些基于的实际数据的计算,并且只能通过查看图片来自行解决。

所以对我而言,关键的想法是制定所需场景的计划(它必须是什么样子)。它应该使用真实的数据,如:

  • 相机之间的距离
  • 摄像机的视角
  • 相机之间矩形的大小(灰色和白色网格)

enter image description here

然后你可以找到一个很好的距离E-F的值,取决于你的虚拟鸟的视图相机的视口大小。在那之后,你的工作差不多完成了。

dst参数只是矩形的缩放版本 I J L K(对于上部相机)。取决于输出图像的像素大小。

src参数应该是照片中的矩形。它的宽度将填满整个图片。必须根据E-F所需距离计算高度

enter image description here

它们是计算红色矩形高度的两种方法。要么你在真实场景上放置“标记”(或者你试图检测一些)以自动找到一条水平线。或者,您可以尝试将其计算为相机仰角的复杂函数(但我想建议您,我认为它看起来相当复杂)。

以下是我如何解决这个问题。我希望它有所帮助:)。