You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同相机位置拍摄图像的OpenCV拼接错位问题求解

不同相机位置拍摄图像的OpenCV拼接错位问题求解

我知道可能没法实现我想要的效果,但还是抱着试试看的心态来提问了。

我现在尝试拼接两张从不同相机位置拍摄的图像,它们是同一时间拍摄的,视角存在差异。我清楚如果是同一相机位置换角度拍摄的话拼接起来没问题,但这次我就是要解决不同相机位置下的拼接难题。

(两张不同相机位置拍摄的同一场景图:画面包含冰面、红蓝线条以及球员,呈现出不同的拍摄视角)

我用这段OpenCV代码尝试拼接:

images = []
image1 = cv2.imread('./VideosToStitch/video2.png')
images.append(image1)
image2 = cv2.imread('./VideosToStitch/video1.png')
images.append(image2)

stitcher = cv2.Stitcher.create()
status, stitched = stitcher.stitch(images,cv2.Stitcher_PANORAMA)

cv2.imwrite('./VideosToStitch/stitched.png', stitched)

拼接后的结果不太理想:画面里的蓝色线条拼接得还算正常,但红色线条直接断裂错位了。

后来我想,是不是可以先对图像做透视变换再拼接?于是我试了这段代码:

image1 = cv2.imread('./VideosToStitch/video1.png')

tl = (907,0)
bl = (0,1280)
tr = (1047,0)
br = (1920,1280)

pts1 = np.float32([tl,bl,tr,br])
pts2 = np.float32([[0,0],[0,1280],[1920,0],[1920,1280]])

matrix = cv2.getPerspectiveTransform(pts1,pts2)
transformedFrame = cv2.warpPerspective(image1, matrix,(1920,1280), flags=3)

结果是红蓝线条变直了,但冰面上的细节几乎全丢了,这显然不是我想要的。

我在想,如果能只对图像做水平方向的透视变换、不影响垂直方向的话,会不会有用?或者有没有办法先把两张图拼接成曲面,再拉直成平面?

大家有什么思路或者建议吗?

补充一下:为了说明Christoph Rackwitz评论里提到的问题,我调整了透视参数,让冰面的线条横竖都对齐了,但结果是垂直于冰面的球员完全没法对齐——两张图里的球员位置错位严重,根本重合不了。

备注:内容来源于stack exchange,提问作者Andrew Wilcox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:32:58