擅长:python、mysql、java
<p>前一天我和你有同样的问题。如果传递<code>P</code>矩阵,则<code>undistortPoints</code>的效果与预期一样,因此它将以像素为单位返回结果(否则它将假定<code>P</code>为标识并返回规范化结果):<code>left_undist = cv2.undistortPoints(left_points, cameraMatrix=left_intrinsics, distCoeffs=left_distortion, R=left_intrinsics)</code></p>
<p>这样,您就不需要弄乱本质。结果是一样的</p>
<p>另外,确保在传递给三角点的参数中使用float</p>
<pre><code>projMat1 = mtx1 @ cv2.hconcat([np.eye(3), np.zeros((3,1))]) # Cam1 is the origin
projMat2 = mtx2 @ cv2.hconcat([R, T]) # R, T from stereoCalibrate
# points1 is a (N, 1, 2) float32 from cornerSubPix
points1u = cv2.undistortPoints(points1, mtx1, dist1, None, mtx1)
points2u = cv2.undistortPoints(points2, mtx2, dist2, None, mtx2)
points4d = cv2.triangulatePoints(projMat1, projMat2, points1u, points2u)
points3d = (points4d[:3, :]/points4d[3, :]).T
</code></pre>