python - 我正在尝试使用cv2.projectPoints(),但出现错误

标签 python opencv pose-estimation

这是错误:

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]]
我不知道如何解决它。问题似乎在于参数的形式。但是,当我检查它们时,它们的形状似乎正确。所以我不知道这是什么问题,但是如果您这样做,将非常有帮助。

最佳答案

也许您正在尝试从旧教程中获取一些代码,或者您误读了有关返回值的函数文档。尝试像这样从solvePnP分配返回值:

result, rvecs, tvecs = cv2.solvePnP(obj_points, image_points, mtx, dist)
在solvePnP函数中(至少从opencv4开始)不应有“inliers”。

关于python - 我正在尝试使用cv2.projectPoints(),但出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63631979/

相关文章:

python - 如何找到 Django 模型基类的 "concrete class"

android - project_create.sh:第4行:android:找不到命令(cygwin&android&jni)

python - 如何找到python模块的功能?

c++ - 使用opencv在MFC图片中显示视频时GUI无法点击

python - 如何使用人体姿势估计生成骨骼 View ?

opencv - 立体三角测量的奇怪问题 : TWO valid solutions

c++ - OpenCV 中的 recoverPose() 函数是左撇子吗?

python - 如何在 python 中引用 Kivy Canvas

python - 由于在 Cygwin 中找不到合适的 Fortran 编译器,我该如何解决这个失败的 Python 扩展构建?

python - 艰难地学习Python ex24