【问题标题】:OpenCV: 4 camera Bird's Eye view?OpenCV:4个摄像头鸟瞰图?
【发布时间】:2016-10-02 19:29:21
【问题描述】:

我在思考如何制作像seen in luxury cars 这样的四摄像头鸟瞰图时遇到了很多麻烦。这是我将用作此问题示例的原件...

现在,我已经做到了,所以图像使用.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 整理的)...

【问题讨论】:

  • 可以分享你要拼接的原图吗?
  • @FrancescoCallari 已编辑以显示原件。

标签: python opencv computer-vision perspectivecamera


【解决方案1】:

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

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

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


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

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

然后,您可以根据“虚构的鸟瞰相机的视口”的大小找到距离 E-F 的良好值。在那之后,你的工作就差不多完成了。


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

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多