2017-09-18 7 views
0

J'essaie de calibrer la caméra fisheye dans OpenCV 3.2. Ce code est:Comment obtenir une image recadrée après calibrage fisheye dans OpenCV

Mat newCamMat; 
      cameraMatrix= getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, 0, imageSize, 0); //Does not change anything 

      fisheye::estimateNewCameraMatrixForUndistortRectify(cameraMatrix, distCoeffs, imageSize, 
                   Matx33d::eye(), newCamMat, 1); 
      fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs, Matx33d::eye(), newCamMat, imageSize, 
              CV_16SC2, map1, map2); 

J'ai utilisé ces drapeaux dans l'étalonnage:

fisheye::CALIB_FIX_SKEW | fisheye::CALIB_RECOMPUTE_EXTRINSIC | fisheye::CALIB_CHECK_COND 

Je veux obtenir une image recadrée sans les zones noires autour de la surface utile. Pour l'étalonnage non-fisheye, je l'ai fait en définissant alpha. Pour fisheye je ne sais pas comment le changer.Toutes les suggestions?

Desired result (inside the red rectangle)

Calibration result

Répondre

0

Vous pouvez utiliser un setTo masqué pour définir la valeur du canal alpha pour la transparence.

Mat img = imread("fisheye.png",-1), gray, mask; 

cvtColor(img, gray, cv::COLOR_BGR2GRAY); 

threshold(gray, mask, 0, 255, cv::THRESH_BINARY_INV); 

cvtColor(img, img, cv::COLOR_BGR2BGRA); 

img.setTo(Scalar(0,0,0,0),mask); 
+0

Je ne veux pas supprimer la zone noire. Je voulais obtenir une zone de rectangle après calibrage qui ne montre que des pixels utilisables. Je sais que j'ai perdu quelques informations sur les virages mais ça n'a pas d'importance. – RobertLT

+0

@RobertLT Téléchargez une image du résultat souhaité. Faites-le manuellement pour montrer ce que vous voulez. – zindarod

+0

Terminé https://i.stack.imgur.com/nTKh8.png – RobertLT