2012-11-30 35 views
2

我正在使用opencv进行图像校正,但希望使用c函数cvInitUndistortRectifyMap返回的地图(mapx和mapy)自己执行映射(通常由cvremap完成)。 在这个过程中我发现奇怪的是,opencv只返回原始图像大小的地图opencv InitUndistortRectifyMap地图大小

这意味着在原始图像映射到其大小之外的区域,纠正的图像只是被截断,因为映射只是图像的大小?! 你可以得到一个完整的映射,所以你得到整个纠正后的图像,而不是原始图像(大小)内的部分?

回答

1

不仅仅是图像大小的问题,原因是默认情况下,cvInitUndistortRectifyMap生成的图仅指向源图像中的有效像素。你想要的是获得所有的像素。

为此,您可以使用cvInitUndistortRectifyMapnewCameraMatrix参数。通过首先呼叫cvGetOptimalNewCameraMatrix(参见this link)并设置α参数获得值newCameraMatrix。正如链接中所解释的:

  • 如果alpha = 0,那么未失真图像中的所有像素都将是有效的(您现在正在获取的)。
  • 如果alpha = 1,那么所有的源图像像素将保留在未失真的图像(你想要的)。某些像素不匹配源图像的任何位置,因此它们会变黑。

如果你愿意,你可以改变与cvGetOptimalNewCameraMatrixnewImageSize参数经校正的图像的期望的大小,但是这不会改变你的结果得到的像素。