سؤال

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