2017-09-18 4 views
0

Ich versuche, kalibrierte Fischaugenkamera in OpenCV 3.2 zu erhalten. Dies ist ein Code:Wie beschnittene Bild nach Fisheye-Kalibrierung in 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); 

ich diese Flags in der Kalibrierung verwendet:

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

I Bild ohne die schwarzen Bereiche um die Nutzfläche abgeschnitten erhalten möchten. Für nicht-fisheye Kalibrierung habe ich es getan, indem ich Alpha einstellte. Für fisheye weiß ich nicht, wie man es ändert. Irgendwelche Vorschläge?

Desired result (inside the red rectangle)

Calibration result

Antwort

0

können Sie einen maskierten setTo Verwendung des Alpha-Kanalwert einzustellen transparent zu sein.

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

Ich möchte nicht schwarzen Bereich entfernen. Ich möchte ractangle Bereich nach der Kalibrierung, die nur brauchbare Pixel zeigt. Ich weiß, dass ich einige Informationen über die Ecken verloren habe, aber das macht nichts. – RobertLT

+0

@RobertLT Laden Sie ein Bild Ihres gewünschten Ergebnisses hoch. Mach es manuell, um zu zeigen, was du willst. – zindarod

+0

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