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 回答