我在思考如何制作像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()
这是我大概想要的最终图像(一个 friend 使用Photoshop放在一起)...
最佳答案
要实现转换,您需要引用getPerspectiveTransform
函数。它需要:
我认为定义“src”和“dst”不是一个容易的问题。它需要基于实际数据的进行一些计算,仅凭看图片就无法自行解决。
因此,对我来说,关键思想是制定所需场景的计划(必须看起来像)。它应使用真实数据,例如:
然后,您可以根据“虚拟鸟瞰相机的视口(viewport)”的大小找到合适的距离E-F。之后,您的工作几乎完成了。
dst
参数只是矩形 I J L K(用于上层摄像头)的缩放版本。取决于输出图像的像素大小。src
参数在您的照片中应该是一个矩形。其宽度将填充整个图片。 高度必须根据E-F所需距离来计算。它们是计算红色矩形高度的两种方法。您可以在上的真实场景上放置“标记”(或者尝试检测一些标记)以自动找到一条水平线。或者,您可以尝试将其计算为相机仰角的复杂函数(但我想建议您,我认为这似乎很复杂)。
这就是我将如何解决该问题的方法。希望对您有所帮助:)
关于python - OpenCV:4个摄像机的鸟瞰图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37602383/