使用 solvePnPRansac 函数时出错
Error using solvePnPRansac function
我正在使用 Python 2.7 和 opencv 3.0.0。
我正在尝试对实时视频进行姿势估计。
所以我用了opencv给的calibrate.py。它运作良好。
在此程序中,我在末尾添加了一些行来处理信息,以便构成轴。我用过这个:http://docs.opencv.org/master/d7/d53/tutorial_py_pose.html#gsc.tab=0
在使用 solvePnPRansac 函数的那一行,我改为这样写:_, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs)
在行的开头添加 _,
。
我出现了这个错误!
error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\matrix.cpp:2294: error: (-215) d == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) in function cv::_OutputArray::create
完全看不懂!
有人可以帮助我吗?
这是我处理视频的代码:
cap = cv2.VideoCapture(0)
while(1):
# Take each frame
ret, frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret, corners = cv2.findChessboardCorners(gray, (6,5),None)
if ret:
term = ( cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1 )
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),term)
_, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs)
imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, camera_matrix, dist_coefs)
frame = draw(frame,corners2,imgpts)
cv2.imshow('img',frame)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
solvePnpRansac只有三个输出值:
OutputArray rvec,
OutputArray tvec,
OutputArray inliers = noArray(),
所以删除开头的 _,
应该会使程序再次运行。
您需要在示例中以相同的方式定义 obj_points
。
我在提供的代码片段中没有看到 obj_points
定义,我认为这就是问题所在
obj_points= np.zeros((6*7,3), np.float32)
obj_points[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)
我遇到了同样的问题。
我使用 solvePnP 而不是 solvePnPRansac,它运行良好。
我想 python 中的 solvePnPRansac 有一个错误。
solvePnP 和 solvePnPRansac 之间的 3D 模型点定义存在差异。 Is not clear in the documentation,但 solvePnP 需要用尺寸为 3xN/Nx3 的矩阵定义的模型,而 solvePnPRansac 需要用尺寸为 3x1xN/Nx1x3 的矩阵定义的模型。
您可以使用此代码将额外维度包含到您的模型中:
modelNx1x3 = np.zeros((N, 1, 3), np.float32)
modelNx1x3[:, 0, :] = modelNx3[:, :]
中找到更多详细信息
我正在使用 Python 2.7 和 opencv 3.0.0。 我正在尝试对实时视频进行姿势估计。 所以我用了opencv给的calibrate.py。它运作良好。 在此程序中,我在末尾添加了一些行来处理信息,以便构成轴。我用过这个:http://docs.opencv.org/master/d7/d53/tutorial_py_pose.html#gsc.tab=0
在使用 solvePnPRansac 函数的那一行,我改为这样写:_, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs)
在行的开头添加 _,
。
我出现了这个错误!
error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\matrix.cpp:2294: error: (-215) d == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) in function cv::_OutputArray::create
完全看不懂!
有人可以帮助我吗?
这是我处理视频的代码:
cap = cv2.VideoCapture(0)
while(1):
# Take each frame
ret, frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret, corners = cv2.findChessboardCorners(gray, (6,5),None)
if ret:
term = ( cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1 )
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),term)
_, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs)
imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, camera_matrix, dist_coefs)
frame = draw(frame,corners2,imgpts)
cv2.imshow('img',frame)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
solvePnpRansac只有三个输出值:
OutputArray rvec,
OutputArray tvec,
OutputArray inliers = noArray(),
所以删除开头的 _,
应该会使程序再次运行。
您需要在示例中以相同的方式定义 obj_points
。
我在提供的代码片段中没有看到 obj_points
定义,我认为这就是问题所在
obj_points= np.zeros((6*7,3), np.float32)
obj_points[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)
我遇到了同样的问题。 我使用 solvePnP 而不是 solvePnPRansac,它运行良好。 我想 python 中的 solvePnPRansac 有一个错误。
solvePnP 和 solvePnPRansac 之间的 3D 模型点定义存在差异。 Is not clear in the documentation,但 solvePnP 需要用尺寸为 3xN/Nx3 的矩阵定义的模型,而 solvePnPRansac 需要用尺寸为 3x1xN/Nx1x3 的矩阵定义的模型。
您可以使用此代码将额外维度包含到您的模型中:
modelNx1x3 = np.zeros((N, 1, 3), np.float32)
modelNx1x3[:, 0, :] = modelNx3[:, :]
中找到更多详细信息