2017-09-18 69 views
0

OpenCV 3.2で魚眼カメラを校正しようとしています。これはコードです: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); 

私は、キャリブレーションでこれらのフラグを使用:

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

私はイメージが使用可能な領域の周りの黒い部分せずにトリミング取得したいです。非魚眼較正のために私はアルファを設定することによってそれをしました。魚眼レンズの場合、私はそれを変更する方法はわかりません。何か提案はありますか?

Desired result (inside the red rectangle)

Calibration result

答えて

0

あなたは透明になるようにアルファチャンネル値を設定するためにマスクされたsetToを使用することができます。

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

黒い部分を削除したくありません。使用可能なピクセルのみを表示するキャリブレーションの後、ラクタングル領域を得ることができます。私はコーナーでいくつかの情報を失ったが、問題ではないことを知っている。 – RobertLT

+0

@RobertLTあなたの望む結果の画像をアップロードしてください。あなたが望むものを手動で表示してください。 – zindarod

+0

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

関連する問題