OpenCV: 四摄像头鸟瞰视角?

12

我正在思考如何制作像豪车上看到的鸟瞰图一样的四个摄像头视频,但是遇到了很多麻烦。以下是我用作此问题示例的原始图像...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制作)的大致样子...

输入图像描述


1
你可以分享你想要拼接的原始图像吗? - Francesco Callari
@FrancescoCallari 编辑后显示原始内容。 - user3818089
1个回答

6
要实现变换,您需要参考getPerspectiveTransform函数。它需要:
  • src:源图像中四边形顶点的坐标。
  • dst:目标图像中相应四边形顶点的坐标。

    我认为定义"src"和"dst"不是一个容易的问题。它需要基于真实世界的数据进行一些计算,并且不能仅仅通过查看图片来解决。


对我而言,关键的想法是制定一个计划,描述所需场景的样子(它应该看起来如何)。计划应该使用真实数据,例如:

  • 相机之间的距离
  • 相机的视角
  • 相机之间矩形区域的大小(灰白格子)

enter image description here

然后,您可以根据虚构鸟瞰摄像机的“视口”大小找到距离E-F的良好值。之后,您的工作就快完成了。


dst参数只是I J L K矩形的缩放版本(针对上部相机)。具体缩放大小取决于输出图像的像素尺寸。 src参数应该是您照片中的一个矩形。它的宽度将填满整张图片。高度必须根据E-F所需距离计算。

enter image description here

有两种方法可以计算红色矩形的高度。一种是在真实场景中放置“标记”(或者尝试检测一些标记)以自动找到水平线。另一种方法是尝试将其计算为相机仰角的复杂函数(但我想建议您,我认为这似乎非常复杂)。以下是我解决这个问题的方法。希望能对你有所帮助 :)

太好了!现在我需要帮助去除黑色角落,这样当图像拼接在一起时,它们就不会重叠。我在这里发布了一个新帖子:http://stackoverflow.com/questions/38276857/opencv-how-to-stitch-four-trapezoid-images-to-make-a-square-image - user3818089

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接