- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在使用 OpenCV 从 iPad 相机获取正确的相机姿势时遇到问题。
我正在使用定制的 2D 标记(基于 AruCo library)- 我想使用 OpenGL 在该标记上渲染 3D 立方体。
为了接收相机姿势,我使用了 OpenCV 的 solvePnP 函数。
根据 THIS LINK我是这样做的:
cv::solvePnP(markerObjectPoints, imagePoints, [self currentCameraMatrix], _userDefaultsManager.distCoeffs, rvec, tvec);
tvec.at<double>(0, 0) *= -1; // I don't know why I have to do it, but translation in X axis is inverted
cv::Mat R;
cv::Rodrigues(rvec, R); // R is 3x3
R = R.t(); // rotation of inverse
tvec = -R * tvec; // translation of inverse
cv::Mat T(4, 4, R.type()); // T is 4x4
T(cv::Range(0, 3), cv::Range(0, 3)) = R * 1; // copies R into T
T(cv::Range(0, 3), cv::Range(3, 4)) = tvec * 1; // copies tvec into T
double *p = T.ptr<double>(3);
p[0] = p[1] = p[2] = 0;
p[3] = 1;
相机矩阵和距离系数来自 findChessboardCorners 函数,imagePoints 是手动检测到的标记角(您可以在下面发布的视频中看到它们是绿色方 block ),和 markerObjectPoints 是代表标记角的手动硬编码点:
markerObjectPoints.push_back(cv::Point3d(-6, -6, 0));
markerObjectPoints.push_back(cv::Point3d(6, -6, 0));
markerObjectPoints.push_back(cv::Point3d(6, 6, 0));
markerObjectPoints.push_back(cv::Point3d(-6, 6, 0));
因为标记在现实世界中有 12 厘米长,所以我在中选择了相同的尺寸以便于调试。
因此,我收到了 4x4 矩阵 T,我将在 OpenCV 中将其用作 ModelView 矩阵。使用 GLKit 绘图功能看起来或多或少像这样:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
// preparations
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float aspect = fabsf(self.bounds.size.width / self.bounds.size.height);
effect.transform.projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(39), aspect, 0.1f, 1000.0f);
// set modelViewMatrix
float mat[16] = generateOpenGLMatFromFromOpenCVMat(T);
currentModelMatrix = GLKMatrix4MakeWithArrayAndTranspose(mat);
effect.transform.modelviewMatrix = currentModelMatrix;
[effect prepareToDraw];
glDrawArrays(GL_TRIANGLES, 0, 36); // draw previously prepared cube
}
我没有将所有东西都绕 X 轴旋转 180 度(正如之前链接的文章中提到的那样),因为我看起来没有必要。
问题是它不起作用!平移向量看起来不错,但是 X 和 Y 旋转搞砸了:(
我录制了一个视频来展示这个问题:
http://www.youtube.com/watch?v=EMNBT5H7-os
我几乎尝试了所有方法(包括一个一个地反转所有轴),但实际上没有任何效果。
我该怎么办?我应该如何正确显示该 3D 立方体?来自 solvePnP 的平移/旋转向量看起来很合理,所以我想我无法将这些向量正确映射到 OpenGL 矩阵。
最佳答案
感谢来自 http://answers.opencv.org/ 的 Djo1509我发现问题是不必要的转置旋转矩阵 R 矩阵用作矩阵 T 的一部分,以及不必要的 tvec = -R * tvec 操作。
更多信息请看there
关于ios - OpenCV + OpenGL : proper camera pose using solvePnP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19612704/
我正在使用react-pose使窗口内和窗口外的通知动画化。 “进入”过渡非常流畅,但是退出时 - 动画非常激进。 有人遇到过这个问题吗?我可以在任何地方上传视频屏幕截图来说明问题(除了 YouTub
我已经尝试了几天在我的游戏中创建 3D 骨骼动画。我正在将 Java 与 LWJGL 结合使用。 在尝试制作动画之前,我试图在程序中实现绑定(bind)姿势。我从 Blender 导出的 collad
我指的是 33 个 body 点和它们之间的连接线。我想更改它们的颜色,尤其是连接线的白色默认颜色。 这是我的代码,我已经为 mediapipe 创建了一个类模块,我可以在我的其他程序中导入和使用它
我指的是 33 个 body 点和它们之间的连接线。我想更改它们的颜色,尤其是连接线的白色默认颜色。 这是我的代码,我已经为 mediapipe 创建了一个类模块,我可以在我的其他程序中导入和使用它
来自文档 https://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/Pose我看到 Pos
我正在尝试创建一个包含不同姿势的物体图像的数据集,其中每个图像都用相机姿势(或物体姿势)进行注释。 例如,如果我有一个世界坐标系,我将感兴趣的对象放在原点并将相机放在已知位置 (x,y,z) 并使其面
我关注了the documentation和 this blog post但我正在努力让任何事情发挥作用。 在本地,我收到以下错误:嘿,听着!找不到有效的 DOM 引用。如果您通过 posed(Com
我正在尝试为一个 ios 项目实现摆姿势。 场景: Defining class of controller at run time 我意识到poseAsClass或class_poseAs不适用于i
我正在尝试为一个 ios 项目实现摆姿势。 场景: Defining class of controller at run time 我意识到poseAsClass或class_poseAs不适用于i
我需要获取手机面向的方向和地平线之间的 Angular theta(见图)。 为此,我使用了 web-vr polyfill 库,它允许我访问 VRPose.orientation,即作为四元数的相机
我有一个服务器功能,可以从图像中检测和估计 aruco 标记的姿势。 使用函数 estimatePoseSingleMarkers 我找到了旋转和平移向量。我需要在带有 ARCore 的 Androi
所以我有一个小型 React 应用程序。尝试使用 React Pose 来制作页面转换动画。我遵循了与 one of the official demos with react-router-dom
我目前正在尝试从NERF模型重建网格,我注意到大多数NERF实现都提供了一个Python脚本,用于通过COLMAP从图像中提取相机姿势。我的理解是,这些脚本使用稀疏重建,或者至少使用COLMAP的特征
我在一个使用tflite Posenet在Flutter Framework的移动设备上运行的项目中。我们希望在测试中获得更高的精度得分,但是我们意识到Dart API文档https://pub.de
在 NDK 中使用此函数时: void ArPose_getMatrix( const ArSession *session, const ArPose *pose, floa
我正在尝试使用 OpenCV 来估计相机相对于另一个的一个姿势,使用 SIFT 特征跟踪、FLANN 匹配以及基本矩阵和基本矩阵的后续计算。分解基本矩阵后,我检查退化配置并获得“正确的”R 和 t。
我在使用 OpenCV 从 iPad 相机获取正确的相机姿势时遇到问题。 我正在使用定制的 2D 标记(基于 AruCo library)- 我想使用 OpenGL 在该标记上渲染 3D 立方体。 为
我想在像 Pinterest 这样的网站中实现图像/div 所使用或遵循的样式。或 Pose不管他们的个人决议是什么。我试过像这样将 div 并排放置 CSS: #mainCont
我有一个带有使用 React Pose 的动画的 React 应用程序 ( https://popmotion.io/pose/ )。 这工作正常,但是当我为组件编写集成测试(使用react-test
在谷歌上 Samples我可以获得有关从 ArAnchor 生成的 Pose 中获取 Matrix 的样本。或来自 ArPlane .但是当我试图从 ArCamera不起作用,我的结果是一个单位矩阵。
我是一名优秀的程序员,十分优秀!