我正在尝试使用 cv2.projectPoints() 但出现错误
I am trying to use cv2.projectPoints() but I am getting an error
这是错误:
imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, mtx, dist)
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\calib3d\src\calibration.cpp:603:
error: (-5:Bad argument) Rotation must be represented by 1x3 or 3x1 floating-point rotation vector, or
3x3 rotation matrix in function 'cvProjectPoints2Internal'
这是我的代码:
axis = np.float32([[3, 0, 0], [0, 10, 0], [0, 0, -50]]).reshape(-1, 3)#axis of coordinates
# PnP calculates the rotation vector and translation vector
rvecs, tvecs, inliers = cv2.solvePnP(obj_points, image_points, mtx, dist)
print(f"mtx shape: {mtx.shape}, tvecs shape: {tvecs.shape}")
print(f"mtx:\n {mtx}")
print(f"tvecs:\n {tvecs}")
# Calculate the coordinates of 3D points projected on 2D image plane
imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, mtx, dist)
这是出口:
mtx shape: (3, 3), tvecs shape: (3, 1)
mtx:
[[1.71223579e+03 0.00000000e+00 1.02990683e+03]
[ 0.00000000e+00 1.70818827e+03 7.83446773e+02]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
tvecs:
[[-0.09038089]
[ -0.05386737]
[ -0.01652085]]
我不知道如何解决它。问题似乎出在论点的形式上。但是当我检查时,它们看起来形状正确。所以我不知道是什么问题,但如果你这样做会很有帮助。
也许您正在尝试从旧教程中获取一些代码,或者您误读了有关 return 值的函数文档。尝试从 solvePnP 中分配 returning 值,如下所示:
result, rvecs, tvecs = cv2.solvePnP(obj_points, image_points, mtx, dist)
solvePnP 函数中不应有“内点”(至少从 opencv4 开始是这样)。
这是错误:
imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, mtx, dist)
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\calib3d\src\calibration.cpp:603:
error: (-5:Bad argument) Rotation must be represented by 1x3 or 3x1 floating-point rotation vector, or
3x3 rotation matrix in function 'cvProjectPoints2Internal'
这是我的代码:
axis = np.float32([[3, 0, 0], [0, 10, 0], [0, 0, -50]]).reshape(-1, 3)#axis of coordinates
# PnP calculates the rotation vector and translation vector
rvecs, tvecs, inliers = cv2.solvePnP(obj_points, image_points, mtx, dist)
print(f"mtx shape: {mtx.shape}, tvecs shape: {tvecs.shape}")
print(f"mtx:\n {mtx}")
print(f"tvecs:\n {tvecs}")
# Calculate the coordinates of 3D points projected on 2D image plane
imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, mtx, dist)
这是出口:
mtx shape: (3, 3), tvecs shape: (3, 1)
mtx:
[[1.71223579e+03 0.00000000e+00 1.02990683e+03]
[ 0.00000000e+00 1.70818827e+03 7.83446773e+02]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
tvecs:
[[-0.09038089]
[ -0.05386737]
[ -0.01652085]]
我不知道如何解决它。问题似乎出在论点的形式上。但是当我检查时,它们看起来形状正确。所以我不知道是什么问题,但如果你这样做会很有帮助。
也许您正在尝试从旧教程中获取一些代码,或者您误读了有关 return 值的函数文档。尝试从 solvePnP 中分配 returning 值,如下所示:
result, rvecs, tvecs = cv2.solvePnP(obj_points, image_points, mtx, dist)
solvePnP 函数中不应有“内点”(至少从 opencv4 开始是这样)。