我正在使用opencv进行图像校正,但希望使用c函数cvInitUndistortRectifyMap返回的地图(mapx和mapy)自己执行映射(通常由cvremap完成)。 在这个过程中我发现奇怪的是,opencv只返回原始图像大小的地图opencv InitUndistortRectifyMap地图大小
这意味着在原始图像映射到其大小之外的区域,纠正的图像只是被截断,因为映射只是图像的大小?! 你可以得到一个完整的映射,所以你得到整个纠正后的图像,而不是原始图像(大小)内的部分?
我正在使用opencv进行图像校正,但希望使用c函数cvInitUndistortRectifyMap返回的地图(mapx和mapy)自己执行映射(通常由cvremap完成)。 在这个过程中我发现奇怪的是,opencv只返回原始图像大小的地图opencv InitUndistortRectifyMap地图大小
这意味着在原始图像映射到其大小之外的区域,纠正的图像只是被截断,因为映射只是图像的大小?! 你可以得到一个完整的映射,所以你得到整个纠正后的图像,而不是原始图像(大小)内的部分?
不仅仅是图像大小的问题,原因是默认情况下,cvInitUndistortRectifyMap生成的图仅指向源图像中的有效像素。你想要的是获得所有的像素。
为此,您可以使用cvInitUndistortRectifyMap的newCameraMatrix参数。通过首先呼叫cvGetOptimalNewCameraMatrix(参见this link)并设置α参数获得值newCameraMatrix。正如链接中所解释的:
如果你愿意,你可以改变与cvGetOptimalNewCameraMatrix的newImageSize参数经校正的图像的期望的大小,但是这不会改变你的结果得到的像素。