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