我需要使用CV_P3P solvePnP方法,但似乎没有任何关于C ++标志的python等价文档,它们是CV_ITERATIVE,CV_P3P和CV_EPNP。我已经尝试过cv2.CV_P3P,cv2.P3P,cv2.cv.P3P等。
我发现了一些问题,包括:
http://opencv-users.1802565.n2.nabble.com/solvePNP-name-of-flag-constants-in-Python-td7484093.html
http://answers.opencv.org/question/8861/what-opencv-constants-are-available/
但是没有答案,除了这个源页面的链接,它定义了python常量。但似乎没有提到我正在寻找的常数。 https://github.com/Itseez/opencv/blob/e3ae36dcb3c1d523802f8642e5c3984db43637c4/modules/python/src2/defs
我也尝试过为该参数传递整数,但它似乎仍然使用默认方法。
在opencv的python版本中,其他解决方法是否可能不存在?
答案 0 :(得分:11)
我发现以下常量有效:
cv2.SOLVEPNP_ITERATIVE
cv2.SOLVEPNP_P3P
cv2.SOLVEPNP_EPNP
cv2.SOLVEPNP_DLS
E.g:
retval, orvec, otvec = cv2.solvePnP(object_points, image_points,
camera_matrix, None, None, None, False, cv2.SOLVEPNP_ITERATIVE)
答案 1 :(得分:2)
使用Python 2.7和OpenCV 2.4.8(来自apt-get),上面的标志“cv2.CV_P3P”有效。
好吧,我仍然遇到错误,但它正在设法调用P3P方法。然后该方法失败并出现错误(粘贴在下面)。
我认为它的断言是imagePoints是一个双通道,一维矩阵,而不是Nx2矩阵。这不是Python绑定遇到麻烦的唯一地方:solvePnP只接受objectPoints的Nx3矩阵,在3xN上失败。我相信这意味着无法从Python调用P3P和EPNP方法,但我希望以其他方式显示。
这是错误:
cv2.error:/build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/undistort.cpp:279:错误:( - 1515)CV_IS_MAT(_src)&& CV_IS_MAT(_dst)&& (_src-> rows == 1 || _src-> cols == 1)&& (_dst-> rows == 1 || _dst-> cols == 1)&& _src-> cols + _src-> rows - 1 == _dst-> rows + _dst-> cols - 1&& (CV_MAT_TYPE(_src-> type)== CV_32FC2 || CV_MAT_TYPE(_src-> type)== CV_64FC2)&& (CV_MAT_TYPE(_dst-> type)== CV_32FC2 || CV_MAT_TYPE(_dst-> type)== CV_64FC2)函数cvUndistortPoints