2

我有 2D png 图像框架

我想在沙发的完美旋转和位置放置一个 3D 平面,如图所示最后一帧

我正在使用three.js 和透视相机手动将旋转和平移添加到平面。

我有放置绿色平面的区域的中心和角坐标。我有初始 3D 坐标位置 - (0,0,0) 和旋转 - (0,0,0)。我有 Object (0,0),(0,100),(140,0),(1 like初始帧

我想使用 OpenCV 和 three.js将初始帧转换为最终帧。如何从该 2D 图像中找到最后一帧中绿色平面的角度,以旋转并将绿色平面转换为白色平面?

我们的最终目标是在这样的平面上放置一个 3D 对象 -最终图像

我尝试使用 OpenCV solvePNP 解决相同的问题,但没有得到想要的结果,它的旋转和平移向量不起作用,并且给出了错误的结果。

4

1 回答 1

1

使用 OpenCV 计算单应性并包装图像以在 python 中选择区域的示例。

首先,加载您的 2D png 图像和横幅图像,横幅图像将替换白色区域。

import cv2
import numpy as np

img = cv2.imread("2D png image.png")
banner = cv2.imread("replace region img.jpg")

然后,手动选择四个角(图像中的沙发角)来定义替换区域。

#point sequence:top_left corner, top right corner, bottom left corner, bottom left corner
pt = np.array([[65,180], [122, 192], [122, 277], [67, 251]]) 

接下来,获取横幅图像的四个角。

#point sequence same as hand select :top_left corner, top right corner, bottom left corner, bottom left corner
pts_banner = np.array([[0, 0], [banner.shape[1] - 1, 0], [banner.shape[1] - 1, banner.shape[0] - 1], [0, banner.shape[0] - 1]])

接下来使用 OpenCV 计算单应矩阵并将图像包装到替换区域。

homographyMat, status = cv2.findHomography(pts_banner, pt)
result1 = cv2.warpPerspective(banner, homographyMat, (img.shape[1], img.shape[0]))

最后,遮光选择区域并将环绕图像添加到输入图像。

cv2.fillConvexPoly(img, pt, (0,0,0))
result2 = img + result1
cv2.imwrite("result.png", result2)

横幅图片:

在此处输入图像描述

输出:

在此处输入图像描述

参考:

https://anishdubey.com/virtual-billboard-homography-perspective-geometric-transformation-image-opencv

于 2021-08-25T03:43:38.383 回答