我正在用opencv进行图像校正,但我想使用c函数cvInitUnstortRectifyMap返回的映射(mapx和mapy)来自己进行映射(通常由cvremap完成)。在这个过程中,我发现opencv只返回原始图像大小的地图很奇怪
这意味着,在原始图像映射到其大小之外的区域中,由于映射仅为图像的大小,因此校正后的图像会被裁剪?!你能得到一个完整的映射,这样你就能得到整个校正后的图像,而不仅仅是原始图像(大小)内的部分吗?
这不仅仅是图像大小的问题,其原因是默认情况下,cvInitUnstortRectifyMap生成的映射仅指向源图像中的有效像素。你想要的是得到所有的像素。
为此,您可以使用cvInitUnstortRectifyMap的newCameraMatrix参数。newCameraMatrix的值是通过首先调用cvGetOptimalNewCameraMatrix(请参阅此链接)并设置alpha参数来获得的。如链接中所述:
- 如果alpha=0,则未失真图像中的所有像素都将有效(您现在获得的)
- 如果alpha=1,那么所有源图像像素都将保留在未失真的图像中(您想要的)。有些像素与源图像的任何位置都不匹配,因此它们将是黑色的
如果您愿意,可以使用cvGetOptimalNewCameraMatrix的newImageSize参数来更改校正图像的所需大小,但这不会改变结果中的像素。