Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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
Python solvePnP的输出不';不匹配项目点_Python_Opencv_Augmented Reality_Opencv Solvepnp - Fatal编程技术网

Python solvePnP的输出不';不匹配项目点

Python solvePnP的输出不';不匹配项目点,python,opencv,augmented-reality,opencv-solvepnp,Python,Opencv,Augmented Reality,Opencv Solvepnp,我从solvePnP获得了奇怪的数据,因此我尝试使用projectPoints进行检查: retval, rvec, tvec=cv2.solvePnP(opts, ipts, mtx, dist, flags=cv2.SOLVEPNP_ITERATIVE) print(retval,rvec,tvec) proj, jac = cv2.projectPoints(opts, rvec, tvec, mtx, dist) print(proj,ipts) 此处选项是在该图片上检测到的z=0的3

我从solvePnP获得了奇怪的数据,因此我尝试使用projectPoints进行检查:

retval, rvec, tvec=cv2.solvePnP(opts, ipts, mtx, dist, flags=cv2.SOLVEPNP_ITERATIVE)
print(retval,rvec,tvec)
proj, jac = cv2.projectPoints(opts, rvec, tvec, mtx, dist)
print(proj,ipts)
此处选项是在该图片上检测到的z=0的3d点:

而IPT取自此图片(此处仅为图片的一部分):

我已经检查了点本身(通过SIFT检测,点被正确检测并以正确的方式配对)

现在我想测试SolvePnP找到的rvec和tvec是否正确,所以我调用cv2.projectPoint来测试3d点是否投影到图像点。以下是我所拥有的:


所以我看到投影点位于图像之外,使用y摄像机矩阵(mts)是不正确的。Fx和Fy非常不同(Fx=6.4154558230601404e+04 Fy=9.8908265814965678e+04)并且非常大。根据OpenCV CalibleCamera()函数中的注释,出现此问题的原因通常是您可能在FindChessBoardCorner中使用了patternSize=cvSize(行,列),而不是使用patternSize=cvSize(列,行)。

如果您可以提供所有数据,即点和校准矩阵,我们可以检查它。3D点应位于对象空间,即X轴向右、Y轴向上和Z轴向后(Z=0),而2D点应位于图像空间,即X轴向右和Y轴向下。Y轴是不同的。最后,在相机空间(即X轴向右、Y轴向下和Z轴向前)计算来自相机的对象旋转+位置。这是否意味着在投影之前必须将Y乘以-1?
1.6324642475694839e+02 -2.1480843988631259e+04 -3.4969507980045117e-01 7.9693609309756430e-01 -4.0684056606034986e+01
6.4154558230601404e+04 0. 1.2973531562160772e+03
0. 9.8908265814965678e+04 9.5760834379036123e+02
0. 0. 1.
[[ 1708.74987793  1138.92041016     0.        ]
 [ 1708.74987793  1138.92041016     0.        ]
 [ 1708.74987793  1138.92041016     0.        ]
 [ 1708.74987793  1138.92041016     0.        ]
 [ 1708.74987793  1138.92041016     0.        ]
 [ 1708.74987793  1138.92041016     0.        ]
 [ 1708.74987793  1138.92041016     0.        ]
 [ 1984.09973145  1069.31677246     0.        ]
 [ 1984.09973145  1069.31677246     0.        ]
 [ 1908.19396973  1200.05529785     0.        ]
 [ 1994.56677246  1286.16516113     0.        ]
 [ 1994.56677246  1286.16516113     0.        ]
 [ 1806.82177734  1058.06872559     0.        ]
 [ 1925.55639648  1077.33703613     0.        ]
 [ 1998.30627441  1115.51647949     0.        ]
 [ 1998.30627441  1115.51647949     0.        ]
 [ 1998.30627441  1115.51647949     0.        ]
 [ 2013.79003906  1168.08728027     0.        ]
 [ 1972.93457031  1234.92614746     0.        ]
 [ 2029.11364746  1220.234375       0.        ]]
[[  71.6125946    11.61344719]
 [ 116.60684967   71.6068573 ]
 [ 116.60684967   71.6068573 ]
 [ 101.60684967   86.60684967]
 [ 101.60684967   86.60684967]
 [ 116.60684967  101.6068573 ]
 [ 116.60684967  101.6068573 ]
 [ 112.37421417   53.40462112]
 [ 112.37421417   53.40462112]
 [  83.76233673   84.36077118]
 [  98.45358276  112.38414764]
 [  98.45358276  112.38414764]
 [  67.2594223    38.04878998]
 [  96.85155487   51.85028076]
 [ 112.26165009   67.25630188]
 [ 112.26165009   67.25630188]
 [ 112.26165009   67.25630188]
 [ 112.24694061   82.24401855]
 [  96.82528687   97.66513824]
 [ 112.2511673    97.25905609]]

rvec = [[-0.21890167] [-0.86241377] [ 0.96051463]]
tvec = [[  239.04461181] [-2165.99539286] [-1700.61539107]]