我正在使用opencv进行图像校正,但想使用c函数cvInitUndistortRectifyMap返回的映射(mapx和mapy)自己进行映射(通常由cvremap完成)。在这个过程中,我觉得奇怪的是 opencv 只返回原始图像大小的地图
这意味着在原始图像映射到其大小之外的区域中,校正后的图像只是被裁剪,因为映射只是图像的大小?!你能得到一个完整的映射,这样你就得到了整个校正后的图像,而不仅仅是原始图像(大小)中的一部分?
我正在使用opencv进行图像校正,但想使用c函数cvInitUndistortRectifyMap返回的映射(mapx和mapy)自己进行映射(通常由cvremap完成)。在这个过程中,我觉得奇怪的是 opencv 只返回原始图像大小的地图
这意味着在原始图像映射到其大小之外的区域中,校正后的图像只是被裁剪,因为映射只是图像的大小?!你能得到一个完整的映射,这样你就得到了整个校正后的图像,而不仅仅是原始图像(大小)中的一部分?
不仅仅是图像大小的问题,其原因是默认情况下, cvInitUndistortRectifyMap 会生成一个仅指向源图像中有效像素的映射。你想要的是得到所有的像素。
为此,您可以使用cvInitUndistortRectifyMap的newCameraMatrix参数。newCameraMatrix的值是通过首先调用cvGetOptimalNewCameraMatrix(参见此链接)并设置alpha参数来获得的。如链接中所述:
如果您愿意,您可以使用 cvGetOptimalNewCameraMatrix 的 newImageSize 参数改变校正图像的所需大小,但这不会改变您在结果中获得的像素。