Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python solvePnPRansac为rvecs和TVEC返回零值_Python_Opencv - Fatal编程技术网

Python solvePnPRansac为rvecs和TVEC返回零值

Python solvePnPRansac为rvecs和TVEC返回零值,python,opencv,Python,Opencv,我想找出我相机的旋转和平移矢量 然而,文件中的solvePnPRansac方法给出的矩阵均为零;它返回角点的值作为输出 print corners [[[ 372.48184204 80.71842194]] [[ 374.40280151 103.50676727]] [[ 377.49230957 128.53459167]] ... so on till .. [[ 204.40803528 168.18978882]] [[ 203.94168091 1

我想找出我相机的旋转和平移矢量

然而,文件中的solvePnPRansac方法给出的矩阵均为零;它返回角点的值作为输出

 print corners
[[[ 372.48184204   80.71842194]]
 [[ 374.40280151  103.50676727]]
 [[ 377.49230957  128.53459167]]
      ... so on till ..
 [[ 204.40803528  168.18978882]]
 [[ 203.94168091  193.23649597]]
 [[ 204.39024353  220.48114014]]
 [[ 204.54725647  248.10583496]]]
我正在使用文档中的代码,并根据我的棋盘对其进行了修改

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((7*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:7].T.reshape(-1,2)
axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3)

for fname in glob.glob('../Right*.jpg'):
      img = cv2.imread(fname)
      gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
      ret, corners = cv2.findChessboardCorners(gray, (7,7),None)
      print ret,corners #ret is true and corners returns an array
      if ret == True:
        # Find the rotation and translation vectors.
         rvecs, tvecs , inliers = cv2.solvePnPRansac(objp, corners, mtx, dist)

rvecs
tvecs
将分别成为
[0,0,0]
[0,0,0]

我可能也遇到了同样的问题——调用solvePnPRansac后,在rvec和tvec中得到零。我找到了一个解决方法-使用solvePnP而不是solvePnPRansac。这对我的4分很有效。但是我的程序是用C++编写的,而不是Python。这是我在开发过程中使用的一些信息,但我想你已经知道了。希望这有帮助

我将solvePnPRansac与python一起使用,我也遇到了同样的问题。与solvePnP相比,solvePnPRansac提供的是,它基于从给定的点对应集合中选择4个或更多点来计算rvec和tvec。做出此选择时,由此获得的投影将导致对所有给定点的足够好的拟合。如果你没有得到一个足够好的拟合点的任何选择,函数将返回零

您可以增加“reprojectError”的值(默认为8)。这将接受更大的重投影错误,因此结果不太好,但可能比根本没有结果要好(除非您的目标是高精度)。例如,尝试:

rvecs, tvecs , inliers = cv2.solvePnPRansac(objp, corners, mtx, dist,reprojectionError=10)

最后,为了完整性,如果您为reprojectError选择一个值,该值高到可以考虑所有点,同时仍然导致可接受的拟合,那么您的结果将与使用solvePnP时相同。

我使用了相同的方法来修复我的。。。!谢谢,虽然我也有同样的问题。有时solvePnPRansac返回合理的结果,但有时我得到0,0,0