opencv InitUndistortRectifyMap地图大小

时间:2012-11-30 15:06:38

标签: opencv computer-vision crop camera-calibration

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

这意味着在原始图像映射到其大小之外的区域中,经过校正的图像只是因为映射只是图像的大小? 你能得到一个完整的映射,以便得到整个校正后的图像,而不仅仅是原始图像(大小)内的部分吗?

1 个答案:

答案 0 :(得分:1)

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

为此,您可以使用 cvInitUndistortRectifyMap newCameraMatrix 参数。通过首先调用 cvGetOptimalNewCameraMatrix (请参阅this link)并设置 alpha 参数来获取 newCameraMatrix 的值。如链接中所述:

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

如果您愿意,可以使用 cvGetOptimalNewCameraMatrix newImageSize 参数改变所需尺码,但这不会改变您在结果中获得的像素数