2012-11-30 2 views
2

opencv를 사용하여 이미지 수정을 수행하고 있지만 c 함수 cvInitUndistortRectifyMap이 반환하는 맵 (mapx 및 mapy)을 사용하여 맵핑을 직접 수행합니다 (대개 cvremap에서 수행). 이 과정에서 opencv가 원본 이미지의 크기로만지도를 반환한다는 것이 이상하다는 것을 알게되었습니다.opencv InitUndistortRectifyMap 맵 크기

원본 이미지가 크기보다 큰 영역에서 매핑이 이루어지기 때문에 수정 된 이미지 만 자르기됩니다. 이미지의 크기? 원본 이미지 (크기) 내에있는 부분 대신 전체 수정 된 이미지를 얻을 수 있도록 전체 매핑을 얻을 수 있습니까?

답변

1

이상의 이미지 크기의 물질보다 이것의 원인은 기본적으로 cvInitUndistortRectifyMap에만 원본 이미지의 유효 화소 포인트 맵을 생성하는 것이다. 당신이 원하는 것은 모든 픽셀을 얻는 것입니다.

이를 위해 당신은 cvInitUndistortRectifyMapnewCameraMatrix 매개 변수를 사용할 수 있습니다. newCameraMatrix의 값은 제 cvGetOptimalNewCameraMatrix (this link 참조)를 호출하고, 알파 매개 변수를 설정하여 얻어진다. 링크에 설명 된대로 :

  • 알파 = 0 인 경우 왜곡되지 않은 이미지의 모든 픽셀이 유효합니다 (현재 획득중인 이미지).
  • 알파가 1이면 모든 원본 이미지 픽셀이 왜곡되지 않은 이미지로 유지됩니다 (원하는대로). 일부 픽셀은 원본 이미지의 어떤 위치와도 일치하지 않으므로 검정색이됩니다.

당신이, 당신이 cvGetOptimalNewCameraMatrixnewImageSize 매개 변수를 사용하여 정류 된 이미지의 원하는 크기를 변화 할 수있다하려면하지만 이것은 당신이 결과를 얻을 픽셀 무엇을 변경되지 않습니다.