【问题标题】:Finding 3d-poses with solvePnP (python, opencv) is off. why?使用solvePnP(python,opencv)查找3d姿势已关闭。为什么?
【发布时间】:2021-05-14 07:26:19
【问题描述】:

我按照this 教程校准了我的相机,使用了 20 张点图案的图像。 绘制的点中心看起来很合适,但是我获得的重投影误差是 11.5 像素 - 这对我来说似乎很大?尚未完成亚像素化。

接下来,我使用相同的图像和上面的校准数据来查找点模式的位姿,使用 solvePnP 函数。 在这里,如下图所示 - 似乎总是正确找到中心,但是绘制的三脚架是关闭的 - 它的两端应该对应

(1,0,0), (0,1,0) and (0,0,-1)

分别。

我的问题是 - 为什么三脚架会随机关闭 - 任何提示我都会很高兴。

谢谢

不幸的是没有任何代表 - 我不能在这里张贴图片。因此只是链接...
img 1
img 2
img 3
img 4
img 5

更新: 使用solvePnP似乎有问题: 我在校准期间将所有对象点重新投影到它们找到的位置 - 看起来不错:

calibration

但是,当使用solvePnP时,会返回不同的rvecs和tvecs,导致对象点的投影错误。

solvePnP

欢迎任何想法;-)

这里是solvePnP的使用代码:

#gray is a grayvalue img of calib plate
#objp is an array of floats containing objpoints
#camera matrix and dist. coeff are imported from previous calibration

axis = np.float32([[1,0,0], [8,0,0], [0,0,-1]])
shape = (4,11)
ret, centers = cv2.findCirclesGrid( \
        gray, shape,  flags=cv2.CALIB_CB_ASYMMETRIC_GRID)
if ret == True:
    # Find the rotation and translation vectors.
    ret, rvecs, tvecs = cv2.solvePnP(objp, centers, camera_matrix, 
                        distortion_coefficients)
    # project 3D points to image plane
    imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, camera_matrix, 
                  distortion_coefficients)

【问题讨论】:

    标签: python opencv calibration


    【解决方案1】:

    我认为问题在于失真系数。可能,这些系数对于图像有很大不同,这是不应该的。尝试使用本教程校准您的相机: https://learnopencv.com/camera-calibration-using-opencv/

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 2013-11-05
    • 2015-05-01
    • 2020-05-26
    • 2017-11-27
    • 1970-01-01
    • 2017-05-30
    • 2015-11-25
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多