- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想找出相机的旋转和平移矢量。
但是,文档中的 solvePnPRansac 方法为每个方法提供了零矩阵;它返回角的值作为输出。
print corners
[[[ 372.48184204 80.71842194]]
[[ 374.40280151 103.50676727]]
[[ 377.49230957 128.53459167]]
... so on till ..
[[ 204.40803528 168.18978882]]
[[ 203.94168091 193.23649597]]
[[ 204.39024353 220.48114014]]
[[ 204.54725647 248.10583496]]]
我正在使用文档中的代码并根据我的棋盘对其进行了修改。
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((7*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:7].T.reshape(-1,2)
axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3)
for fname in glob.glob('../Right*.jpg'):
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (7,7),None)
print ret,corners #ret is true and corners returns an array
if ret == True:
# Find the rotation and translation vectors.
rvecs, tvecs , inliers = cv2.solvePnPRansac(objp, corners, mtx, dist)
rvecs
和 tvecs
是 [0,0,0]
和 [0,0,0]
,分别。
最佳答案
我在 python 中使用了 solvePnPRansac,我遇到了同样的问题。与 solvePnP 相比,solvePnPRansac 提供的是它根据从给定的点对应集中选择 4 个或更多点来计算 rvec 和 tvec。做出这种选择使得由此获得的投影将导致对所有给定点的足够好的拟合。如果您对任何点的选择都不够好,该函数将返回零。
您可以增加“reprojectError”的值(默认为 8)。这将接受更大的重投影误差,因此结果不太好,但总比没有结果好(除非你的目标是高精度)。例如,尝试:
rvecs, tvecs , inliers = cv2.solvePnPRansac(objp, corners, mtx, dist,reprojectionError=10)
最后,为了完整起见,如果您为 reprojectError 选择的值高到可以考虑所有点,同时仍然导致可接受的拟合,则您的结果将与使用 solvePnP 时相同。
关于python - solvePnPRansac 为 rvecs 和 tvecs 返回零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23921090/
我读过 this回答,但我仍然不明白 calibrateCamera 返回的 rvec/tvec 对和 solvePnP< 返回的 rvec/tvec 对. 我知道 solvePnP 解决了此处给出的
我正在尝试使用来自 KITTI 数据集的立体相机对来估计相机轨迹。该程序在某些时候使用了 cv::SolvePNP() 并且对于前 1500 帧它返回了相当不错的结果,但之后它变得完全疯狂。 这是我目
我想找出相机的旋转和平移矢量。 但是,文档中的 solvePnPRansac 方法为每个方法提供了零矩阵;它返回角的值作为输出。 print corners [[[ 372.48184204 8
考虑代码: glm::mat4x4 T = glm::mat4x4(1); glm::vec4 vrpExpanded; vrpExpanded.x = this->vrp.x; vrpExpande
我正在尝试测量相机的姿态,我已经完成了以下操作。 标记世界 3-D(假设 z=0,因为它是平坦的)点在平面上正方形的角上并假设世界坐标系。(以厘米为单位) 已将正方形的左上角作为我的原点,并按以下顺序
我已经校准了相机并获得了0.17的重新投影错误,该文件另存为camera.yml。然后,我将此文件导入到aruco检测算法中,当我运行该算法时,一切正常,直到检测到aruco标记为止,但是,一旦检测到
我是一名优秀的程序员,十分优秀!