私はOpenCVのカメラ較正スイートを使用して、魚眼カメラから画像を歪ませようとしています(関連があればGoProを使用しています)。私はプロセスのほとんどを動作させており、ひずみのないイメージを生成することができます。ただし、再マップを使用する場合、歪みのない画像は「有効な矩形」です。つまり、歪んでいないフレームに内在する湾曲した黒い枠線を避けるために、元の画像を切り取った画像が返されます。OpenCVによる単一のカメラ較正 - 「完全な」ひずみのない画像を生成する問題
私は非常に奇妙な結果で状況を修正するためにgetOptimalNewCameraMatrix()を使用しようとしました。あなたのうちの一人が私の問題を明らかにしてくれることを願っています。
次のように私は現在、カメラのキャリブレーション:
私は必要cameraMatrixを生成double error = calibrateCamera(worldPoints, sensorPoints, process_size, cameraMatrix, distCoeffs, rvecs, tvecs, calibration_flags);
。この部分は動作します(私は思う)。これをinitUndistortRectifyMap()とそれに続くremap()で実行すると、有効なイメージが返されるからです。しかし、私は完全な画像を探していますので、私は次のことは、次のように私のcameraMatrixを修正しようとしている:これは(
int alpha = 1;
cameraMatrix_corr = getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, image.size(), alpha);
をその後、私は、リマップのためのXとYのマップを生成し、次のようにOpenCV 2.0 Cookbookから直接借りてきたので、私もかなり自信が持てます)。
initUndistortRectifyMap(
cameraMatrix_corr, // computed camera matrix
distCoeffs, // computed distortion matrix
Mat(), // optional rectification (none)
Mat(), // camera matrix to generate undistorted
image.size(), // size of undistorted
CV_32FC1, // type of output map
map1, map2); // the x and y mapping functions
最後に、イメージを再マップします。
// Apply mapping functions
remap(image, undistorted, map1, map2, INTER_LINEAR);
ここまでは私の結果です。アルファ= 0(行列を変更しない)を使用すると、合理的な(結果は残っていますが)結果が得られます。私は私に新しいイメージにマッピングされたすべての元の画素を持つ画像を与えるべきだと思うのα= 1を、使用している場合は、私は次の取得
:
ので、私の質問はこれです:私は間違って何をしています、なぜ私はキャリブレーションから裁断されていない歪んでいない画像を得ることができないのですか?
私のことを考えてくれてありがとう、これは私の最初の質問ですが、私は可能な限り完全にしようとしました。私が何とかしゃがんでしまったかどうか教えてください!
私は、最適化関数によって与えられた関心領域が小さすぎる同様の問題を抱えていました。あなたの "カメラの行列を補正することはあなたが歪まないようにするべきではない"というアドバイスに基づいて、 'newcameramtx'パラメータを' dst = cv2.undistort(img、camera_matrix、dist_coefs、None、newcameramtx) 'に落としてみました。私のための問題。ありがとう! –