I am trying the stereo calibration in opencv using python. I am using python version 2.7.1 and openCV version 2.4.2 When i run the code, I get an error saying too many values to unpack. Below is my code:

objpts=[] 
objPoints = []
pointCounts = hor*ver 
R = [8]
T = [8]
E=[]
F=[]
R1 = [] 
R2 = [] 
P1=[] 
P2 =[]
objectPoints = [] 
imgPoints1 = [] 
imgPoints2 = [] 
imagePoints2 = [] 
imagePoints1 = []

while ((len(imagePoints1) < hor*ver) and (len(imagePoints2)< hor*ver)):

     ret,imgr  = webCamHndlr_r.read(0)
     ret,imgl  = webCamHndlr_l.read(1)
     grey_imgr = cv2.cvtColor(imgr, cv.CV_BGR2GRAY)
     grey_imgl = cv2.cvtColor(imgl, cv.CV_BGR2GRAY)
     ret, cornersr =cv2.findChessboardCorners(grey_imgr,dims)
     cv2.drawChessboardCorners(grey_imgr,dims,cornersr,0)
     ret, cornersl =cv2.findChessboardCorners(grey_imgl,dims)
     cv2.drawChessboardCorners(grey_imgl,dims,cornersl,0)
     cv2.imshow("chessboard", grey_imgr)
     cv2.imshow("chessboard1", grey_imgl)

     objPoints = np.zeros((hor*ver,3), np.float32)
     objPoints[:,:2] = np.mgrid[0:hor,0:ver].T.reshape(-1,2)

     if cv.WaitKey(-1) == 32:

          imagePoints1.append(cornersl)
          imagePoints2.append(cornersr)
          print len(imagePoints1)
          objectPoints.append(objPoints)
          cv2.imwrite("./test_images/img_r"+str(i)+".jpg",imgr)
          cv2.imwrite("./test_images/img_l"+str(i)+".jpg",imgl)
          i = i+1;


          if cv2.waitKey(10) == 27:
               break
objectPoints = [np.asarray(x) for x in objectPoints]
imagePoints1 = [np.asarray(x) for x in imagePoints1]
imagePoints2 = [np.asarray(x) for x in imagePoints2]

if( len(imagePoints1[0])== len(imagePoints2[0]) == len(objectPoints[0]) == len(objectPoints)== len(imagePoints2) == len(imagePoints1) ) : print len(imagePoints1[0])

       cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, (320,240))
       print R

       cv.StereoRectify(cameraMatrix1, cameraMatrix2, distCoeffs1, distCoeffs2,(imgr.width,imgr.height), R, T, R1, R2, P1, P2, Q, CV_CALIB_ZERO_DISPARITY, -1, (0, 0))
       print  Q
       np.savetxt('Q_mat.txt',Q)

and the error I get is :

Traceback (most recent call last): File "depth_estimation.py", line 82, in cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, (320,240)) ValueError: too many values to unpack

I am giving an array of objectpoints each of which in turn is an array of points.

有帮助吗?

解决方案

This is because one more Value is returned. As stated in the documentation cv2.stereoCalibrate returns

retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F

this means your code should be

retval,cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, (320,240))

instead of just

cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, (320,240))

其他提示

Use CV_64F instead of CV_8FC1 that would solve the problem:

cv.CreateMat(r.width,r.height, cv.CV_8FC1)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top