3

私はopencvで画像修正を行っていますが、c関数cvInitUndistortRectifyMapが返すマップ(mapxとmapy)を使用して自分でマッピングを行いたいです(通常はcvremapによって行われます)。このプロセスで、opencv が元の画像のサイズのマップのみを返すのは奇妙だと思います

これは、元の画像がそのサイズの外側にマッピングされている領域では、マッピングが画像のサイズのみであるため、修正された画像が切り取られていることを意味します?! 完全なマッピングを取得して、元の画像 (サイズ) 内にある部分だけではなく、修正された画像全体を取得できますか?

4

1 に答える 1

2

画像サイズの問題以上に、これの原因はデフォルトで cvInitUndistortRectifyMapがソース画像の有効なピクセルのみを指すマップを生成することです。必要なのは、すべてのピクセルを取得することです。

これには、 cvInitUndistortRectifyMapのnewCameraMatrixパラメータを使用できます。newCameraMatrixの値は、最初にcvGetOptimalNewCameraMatrix (このリンクを参照) を呼び出し、 alphaパラメータを設定することによって取得されます。リンクで説明されているように:

  • alpha = 0 の場合、歪みのない画像のすべてのピクセルが有効になります (現在取得しているもの)。
  • alpha = 1 の場合、すべてのソース イメージ ピクセルが歪みのないイメージに保持されます (目的のイメージ)。一部のピクセルはソース イメージのどの位置とも一致しないため、黒になります。

必要に応じて、 cvGetOptimalNewCameraMatrixのnewImageSizeパラメータを使用して、調整された画像の目的のサイズを変更できますが、結果で得られるピクセルは変更されません。

于 2013-02-07T15:47:12.207 に答える