OpenCV:4相机鸟瞰图?

OpenCV: 4 camera Bird's Eye view?

想着怎么拍成那样的四摄像头鸟瞰图,我很苦恼seen in luxury cars. Here is the original that I will be using as an example for this question...

现在,我已经做到了使用 .getPerspectiveTransform 使图像倾斜,但这只是一张图像。

我显然需要四个,但对如何将这些图像拼接在一起一无所知。如果这就是图像的外观,我也一无所知。这是我目前拥有的代码:

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 拼凑而成)...

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

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

    我认为定义"src"和"dst"不是一个简单的问题。它需要一些基于真实世界数据的计算,并且无法自行解决,仅通过查看图片即可。


所以对我来说,关键的想法是制定一个计划想要的场景(它必须看起来像什么)。它应该使用真实数据,例如:

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

然后你可以根据 "viewport of your fictive bird's view camera" 的大小找到一个合适的距离 E-F 值。在那之后,你的工作就快完成了。


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

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

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

这是我解决该问题的方法。希望对您有所帮助:)