Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于AR标记的Opencv平面检测_Opencv_Augmented Reality_Aruco - Fatal编程技术网

基于AR标记的Opencv平面检测

基于AR标记的Opencv平面检测,opencv,augmented-reality,aruco,Opencv,Augmented Reality,Aruco,假设我在桌子上有一个aruco,我如何使用aruco计算桌子平面,将一个对象(比如图像)放置在桌子上。我不想将对象放在aruco上,而是放在同一个平面上(比如在它旁边,在它前面(更靠近观察者)等等)。 假设我知道如何检测阿鲁科角落。这是我正在寻找的另一个表位置的透视变换 --编辑-- 添加我正在尝试实现的示例图像: (请忽略我糟糕的photoshop技能) 现在我知道我可以在名片和阿鲁科检测到的角之间使用opencv透视变换,但这不会使b-卡扭曲成正方形吗?如何计算表上b卡的“正确”目的地坐标

假设我在桌子上有一个aruco,我如何使用aruco计算桌子平面,将一个对象(比如图像)放置在桌子上。我不想将对象放在aruco上,而是放在同一个平面上(比如在它旁边,在它前面(更靠近观察者)等等)。 假设我知道如何检测阿鲁科角落。这是我正在寻找的另一个表位置的透视变换

--编辑--

添加我正在尝试实现的示例图像: (请忽略我糟糕的photoshop技能)


现在我知道我可以在名片和阿鲁科检测到的角之间使用opencv透视变换,但这不会使b-卡扭曲成正方形吗?如何计算表上b卡的“正确”目的地坐标?因此,我会在
getPerspectiveTransform
(而不是aruco角点)中使用它们。

如果您试图将3D对象放置在aruco代码旁边,只需将对象中心像(0,1,0)一样放置在世界中,aruco假设标记中心为世界原点,并使用rt Transform from pose estimated(solvepnp)作为3D渲染设置(如opengl、ogre或Unity3D)中的世界到摄影机变换。别忘了用你拍摄的真实相机图像调整你的相机的校准参数。如果您不熟悉3D渲染,这并不容易,但我相信您可以找到Unity3D的一些代码甚至插件


如果您试图在aruco代码旁边放置2D图像,有一种更简单的“不那么3D”的方法。在2D原始图像空间中检测到4个角点,
cv::aruco::detectMarkers(图像、字典、角点、ID)
您可以使用标记,
Mat cv::getPerspectiveTransform(InputArray src,InputArray dst,int solveMethod=DECOMP_LU)从要放入的图像到原始源图像进行透视变换。
。然后,您可以将此透视变换应用于要使用
cv::warpPerspective(InputArray src、OutputArray dst、InputArray M、Size dsize、int flags=INTER_LINEAR、int borderMode=BORDER_CONSTANT、const Scalar&borderValue=Scalar())放入的图像。
。将其覆盖到原始图像


如果您想在标记旁边使用rt transform from pose estimation将点(1,1,0)投影到2D图像。并替换4个2D点。

如果您试图将3D对象放置在aruco代码旁边,只需将对象中心像(0,1,0)一样放置在世界中,aruco假设标记中心为世界原点,并使用rt transfrom pose estimated(solvepnp)作为3D渲染设置(如opengl、ogre或Unity3D)中的世界到摄影机变换。别忘了用你拍摄的真实相机图像调整你的相机的校准参数。如果您不熟悉3D渲染,这并不容易,但我相信您可以找到Unity3D的一些代码甚至插件


如果您试图在aruco代码旁边放置2D图像,有一种更简单的“不那么3D”的方法。在2D原始图像空间中检测到4个角点,
cv::aruco::detectMarkers(图像、字典、角点、ID)
您可以使用标记,
Mat cv::getPerspectiveTransform(InputArray src,InputArray dst,int solveMethod=DECOMP_LU)从要放入的图像到原始源图像进行透视变换。
。然后,您可以将此透视变换应用于要使用
cv::warpPerspective(InputArray src、OutputArray dst、InputArray M、Size dsize、int flags=INTER_LINEAR、int borderMode=BORDER_CONSTANT、const Scalar&borderValue=Scalar())放入的图像。
。将其覆盖到原始图像


如果您想在标记旁边使用rt transform from pose estimation将点(1,1,0)投影到2D图像。并替换4个2D点。

thx供您回复。为了简单起见,假设我想在正方形的阿鲁科旁边放置一个矩形名片图像。这两者之间的转换是否会改变名片的纵横比(如将其变成正方形)?另外,你有没有一些参考资料(或例子),我可以从中了解什么是“姿势估计的rt变换”。谢谢透视变换是从名片图像空间(表示您有一张名片200*200,取4个角点坐标)到相机捕获的图像空间(即您的相机捕获640*480图像,检测到aruco标记和4个角点坐标)的变换。搜索一些2D图像变换的参考。对于来自姿势估计的rt变换,本书具有良好的虚拟现实特征。在问题中添加了更多信息,以更好地解释我试图实现的目标。查看编辑的示例图片。这只是我回答的最后一部分“如果你想在标记旁边做点什么,就用姿势估计的rt变换将点(1,1,0)投影到2D图像上,然后替换4个2D点。”在aruco角平面的同一平面上做4个3D角点。将它们投影到2D图像,然后获取透视图transformthx供您回复。为了简单起见,假设我想在正方形的阿鲁科旁边放置一个矩形名片图像。这两者之间的转换是否会改变名片的纵横比(如将其变成正方形)?另外,你有没有一些参考资料(或例子),我可以从中了解什么是“姿势估计的rt变换”。谢谢透视变换是从名片图像空间(表示您有一张名片200*200,取4个角点坐标)到相机捕获的图像空间(即您的相机捕获640*480图像,检测到aruco标记和4个角点坐标)的变换。搜索一些2D图像变换的参考。对于来自姿势估计的rt变换,这本书包含了一个很好的特征,用于模拟现实。在问题中添加了更多信息,以更好地解释我试图实现的目标。查看编辑的