OpenCV:4相机鸟瞰图?

use*_*089 8 python opencv computer-vision perspectivecamera

我在考虑如何制作像豪华车看到的四相机鸟瞰图时遇到了很多麻烦.这是我将用作这个问题的一个例子的原始...在此输入图像描述

现在,我已经做到了这样,图像是倾斜使用,.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()
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

Ale*_*eau 5

要实现转换,您需要引用该getPerspectiveTransform函数。它需要:

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

    我认为定义“src”和“dst”并不是一个容易的问题。它需要一些基于现实世界数据的计算,不能自己解决,只看图片。


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

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

在此处输入图片说明

然后,您可以根据“虚拟鸟瞰相机的视口”的大小找到距离 EF 的合适值。在那之后,你的工作就快完成了。


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

src参数应该是在你的照片的矩形。它的宽度将填满整个图片。该高度必须从EF希望距离来计算

在此处输入图片说明

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

这是我解决这个问题的方法。我希望它有帮助:)