我在考虑如何制作像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放在一起)......
答案 0 :(得分:4)
要实现转换,您需要参考getPerspectiveTransform
函数。需要:
dst:目标图像中相应四边形顶点的坐标。
我认为定义“src”和“dst”不是一个容易的问题。它需要一些基于的实际数据的计算,并且只能通过查看图片来自行解决。
所以对我而言,关键的想法是制定所需场景的计划(它必须是什么样子)。它应该使用真实的数据,如:
然后你可以找到一个很好的距离E-F的值,取决于你的虚拟鸟的视图相机的视口大小。在那之后,你的工作差不多完成了。
dst
参数只是矩形的缩放版本 I J L K(对于上部相机)。取决于输出图像的像素大小。
src
参数应该是照片中的矩形。它的宽度将填满整个图片。必须根据E-F所需距离计算高度。
它们是计算红色矩形高度的两种方法。要么你在真实场景上放置“标记”(或者你试图检测一些)以自动找到一条水平线。或者,您可以尝试将其计算为相机仰角的复杂函数(但我想建议您,我认为它看起来相当复杂)。
以下是我如何解决这个问题。我希望它有所帮助:)。