首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenCV中计算透视变换

在OpenCV中计算透视变换
EN

Stack Overflow用户
提问于 2016-09-21 22:42:52
回答 2查看 363关注 0票数 0

我怎样才能从墙的角度得到“点”的位置?我知道x,y,(z)坐标从摄像机的角度,我知道墙的边缘点。

我想要计算该点是否位于墙的前面,以及它的另一侧(左,右)。我的想法是计算墙的平面方程,并测试从点到平面的垂直线是否在墙的边界中与它相撞。

我能以某种方式做到这一点而不使用z坐标(它是非常不准确的),并且墙和相机之间的角度是可变的。

EN

回答 2

Stack Overflow用户

发布于 2016-09-22 00:38:33

如果知道墙中心的xc、yc位置,则可以在新的参考系中变换点的X、Y坐标。

首先,翻译原点。如果相机位于坐标(0,0)中,则3D世界中点(X',Y',Z')的新坐标将为

代码语言:javascript
复制
X' = X - xc
Y' = Y - yc
Z' = Z

(假设从您的图像可以看出,墙与XY平面是正交的)

现在你必须绕着Z轴旋转一个你知道的角度,并获得相对于墙中心的最终坐标X'',Y'',Z'‘。

如果角度不同,你就可以得到rotational matrix around Z

代码语言:javascript
复制
     cos(alpha) -sin (alpha)    0
R = [sin(alpha) cos(alpha)      0]
         0           0          1

并获得(向量乘法矩阵)

代码语言:javascript
复制
(X'', Y'', Z'') = R*(X',Y',Z') 

您必须再次获得Z'‘=Z

现在你可以定义点在墙的左边或右边,检查X'‘>0或X'’<0(你也可以用Y'',这取决于你使用的alpha的值)

如果这个答案假设了你还没有的东西(alpha,xc,yc,点的3D坐标),告诉我,我会添加一个方法或策略。

票数 0
EN

Stack Overflow用户

发布于 2016-09-22 06:58:20

如果z坐标不重要,你可以忘记它,只使用x,y。

您可以将一条线拟合到墙的二维点,而不是平面。接下来,按照您的建议,计算一条穿过绿点并垂直于墙的线的线,并计算墙的线和垂直线之间的交点。

如果交点的x或y坐标在墙界限内,

x_wall_min

比这一点站在墙前还多。

如果墙和摄像头之间的角度可以改变,那么你必须更好地定义“墙的左边或右边”,因为它在某些角度可能不明显。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39619754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档