我在思考如何制作像seen in luxury cars这样的四相机鸟瞰图时遇到了很多麻烦。这是我将以该问题为例的原始文件... python - OpenCV:4个摄像机的鸟瞰图?-LMLPHP

现在,我已经做到了,所以使用.getPerspectiveTransform歪曲了图像,但这仅适用于一张图像。

python - OpenCV:4个摄像机的鸟瞰图?-LMLPHP

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

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()

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

python - OpenCV:4个摄像机的鸟瞰图?-LMLPHP

最佳答案

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

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

    我认为定义“src”和“dst”不是一个容易的问题。它需要基于实际数据的进行一些计算,仅凭看图片就无法自行解决。


  • 因此,对我来说,关键思想是制定所需场景的计划(必须看起来像)。它应使用真实数据,例如:
  • 相机之间的距离
  • 摄像机的视角
  • 摄像机之间的矩形大小(灰色和白色网格)

  • python - OpenCV:4个摄像机的鸟瞰图?-LMLPHP

    然后,您可以根据“虚拟鸟瞰相机的视口(viewport)”的大小找到合适的距离E-F。之后,您的工作几乎完成了。
    dst参数只是矩形 I J L K(用于上层摄像头)的缩放版本。取决于输出图像的像素大小。
    src参数在您的照片中应该是一个矩形。其宽度将填充整个图片高度必须根据E-F所需距离来计算。

    python - OpenCV:4个摄像机的鸟瞰图?-LMLPHP

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

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

    关于python - OpenCV:4个摄像机的鸟瞰图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37602383/

    10-12 22:46