- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为什么我的代码片段给我的投影点结果很奇怪?
//Generate the one 3D Point which i want to project onto 2D plane
vector<Point3d> points_3d;
points_3d.push_back(Point3d(10, 10, 100));
Mat points3d = Mat(points_3d);
//Generate the identity matrix and zero vector for rotation matrix and translation vector
Mat rvec = (Mat_<double>(3, 3) << (1, 0, 0, 0, 1, 0, 0, 0, 1));
Mat tvec = (Mat_<double>(3, 1) << (0, 0, 0));
//Generate a camera intrinsic matrix
Mat K = (Mat_<double>(3,3)
<< (1000, 0, 50,
0, 1000, 50,
0, 0, 1));
//Project the 3D Point onto 2D plane
Mat points_2d;
projectPoints(points_3d, rvec, tvec, K, Mat(), points_2d);
//Output
cout << points_2d;
我得到了投影的 2D 点
points_2d = (-1.708699427820658e+024, -9.673395654445999e-026)
最佳答案
添加 cv::Rodrigues(InputArray src, OutputArray dst, OutputArray jacobian=noArray())
。 OpenCv 在计算中使用旋转向量而不是旋转矩阵。 Rodrigues 变换允许您将旋转矢量转换为矩阵以及将矩阵转换为矢量。下面我附上了你的部分代码,添加了一行。
//Generate the identity matrix and zero vector for rotation matrix and translation vector
Mat rvec,rMat = (Mat_<double>(3, 3) << (1, 0, 0, 0, 1, 0, 0, 0, 1));
Rodrigues(rMat,rvec); //here
Mat tvec = (Mat_<double>(3, 1) << (0, 0, 0));
它应该可以正常工作。最好将失真系数定义为
Mat dist = Mat::zeros(8,1,CV_32f);
编辑:
再说一句,你在矩阵初始化中几乎没有语法错误:
cv::Mat rvec,rMat = (cv::Mat_<double>(3, 3) << /* ( */1, 0, 0, 0, 1, 0, 0, 0, 1); //you had error here
cv::Rodrigues(rMat, rvec);
cv::Mat tvec = (cv::Mat_<double>(3, 1) <</* ( */ 0, 0, 0); //and here
修改后它可以在我的电脑上运行。
关于OpenCV:为什么 projectPoints() 给我奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524955/
这是错误: imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, mtx, dist) cv2.error: OpenCV(4.2.0) C:\pro
我不断收到 断言失败(0 Generate3DPoints() { std::vector points; float x,y,z; x=.5;y=.5;z=.5; points.p
为什么我的代码片段给我的投影点结果很奇怪? //Generate the one 3D Point which i want to project onto 2D plane vector point
我正在使用 cv::projectPoints 获取 3D 点 vector 的相应像素。 这些点都离得很近。 问题是,对于某些点,我得到了正确的像素坐标,但对于其他点,我得到了奇怪的负值,例如 -2
我正在尝试编写自己的 cv2.projectPoints 实现只是为了练习,我的实现没有达到预期的效果。 我假设针孔相机没有失真,所以我所做的就是将以下等式应用于我所有的平面物点。 假设在某个世界空间
我有一个面向相当于棋盘的相机。我知道点的世界 3d 位置以及相机图像上相应投影点的 2d 位置。所有的世界点都属于同一个平面。我使用 solvePnP: Matx33d camMat; Matx41d
当我使用下面的java代码和最简单的输入运行projectPoints函数时,我得到了我认为不正确的答案。我错过了什么吗? 我得到了这个答案 (x,y,z)= [{0.0, 1.0, 1.0}, {0
我正在尝试使用 OpenCV 量化相机校准的准确性。在我的程序中,我正在读取棋盘图案的图像并调用 calibrateCamera 函数来初步猜测我的相机内部和外部。我知道仅使用一张图像不会产生完美的校
我正在使用 OpenCV 的 calibrateCamera 并试图了解它如何计算重投影误差以及该误差代表什么。它似乎是投影点和测量图像点之间的(欧几里得)距离的 RMS——对吗?然而,最终的重投影误
我有一个 3D 世界,我正尝试使用 cv2.projectPoints 将其映射到 2D View ,但它并不像我预期的那样运行。我对 opencv、numpy 和矩阵操作的掌握很薄弱,所以我一定是在
我正在尝试在场景的父 View 上的球体上绘制一个框架,但由于某种原因,由 SCNScene.projectPoint 方法转换的点被置换了。 为简单起见,我在场景中心创建了一个半径为 2 的球体。球
我已按照 https://docs.opencv.org/master/d7/d53/tutorial_py_pose.html 上的教程进行操作基于在 https://docs.opencv.org
我想校准我的相机并绘制 xyz 轴。 (如此链接所示:http://docs.opencv.org/3.1.0/d7/d53/tutorial_py_pose.html) 不幸的是,我的校准有些奇怪,
根据我的理解,undistortPoints 在扭曲图像上获取一组点,并计算它们的坐标在同一图像的未扭曲版本上的位置。同样,projectPoints 将一组对象坐标映射到它们对应的图像坐标。 但是,
在相机校准中,我使用 calibrateCamera() 从校准图案的多个 View 中查找相机参数。它恰恰做了两件事: 1) 假设镜头畸变为零,估计封闭形式的初始相机参数。 2) 运行全局 Leve
我想从 SCNNode 检索屏幕坐标,这样我就可以在 SpriteKit 叠加层中使用这些坐标。该节点是一个子节点。当我旋转父节点的枢轴 projectPoint 时返回乱码结果。 场景: class
SceneKit 的 renderer(_:updateAtTime:) 在后台线程上运行。 Apple 已表示不要在 NSView 和主线程外的子类上调用任何方法。 projectPoint(_:)
我正在展示一个由 SceneKit 中的多个 SNNode 组成的 3d 模型。 我在 sceneview-overlay View 上显示一个 2D SpriteKit 节点。 2D 节点位置应始终
我是一名优秀的程序员,十分优秀!