opencv InitUndistortRectifyMap 地图大小

Posted

技术标签:

【中文标题】opencv InitUndistortRectifyMap 地图大小【英文标题】:opencv InitUndistortRectifyMap map size 【发布时间】:2012-11-30 15:06:38 【问题描述】:

我正在使用 opencv 进行图像校正,但想使用 c 函数 cvInitUndistortRectifyMap 返回的映射(mapx 和 mapy)自己进行映射(通常由 cvremap 完成)。 在这个过程中,我觉得奇怪的是 opencv 只返回原始图像大小的地图

这意味着在原始图像映射到其大小之外的区域中,校正后的图像只是被裁剪,因为映射只是图像的大小?! 您能否获得完整的映射,以便获得整个校正后的图像,而不仅仅是原始图像(大小)内的部分?

【问题讨论】:

【参考方案1】:

不仅仅是图像大小的问题,其原因在于默认情况下,cvInitUndistortRectifyMap 生成的地图仅指向源图像中的有效像素。你想要的是得到所有的像素。

为此,您可以使用 cvInitUndistortRectifyMapnewCameraMatrix 参数。 newCameraMatrix 的值是通过首先调用 cvGetOptimalNewCameraMatrix(参见this link)并设置 alpha 参数获得的。如链接中所述:

如果 alpha = 0,则未失真图像中的所有像素都是有效的(您现在获得的)。 如果 alpha = 1,则所有源图像像素都将保留在未失真的图像中(您想要的)。某些像素与源图像的任何位置都不匹配,因此它们将是黑色的。

如果您愿意,您可以使用 cvGetOptimalNewCameraMatrixnewImageSize 参数来改变所需的校正图像大小,但这不会改变您在结果中获得的像素.

【讨论】:

以上是关于opencv InitUndistortRectifyMap 地图大小的主要内容,如果未能解决你的问题,请参考以下文章

cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录

opencv相机标定

opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建

如何使用opencv实现图像匹配

OpenCV 简介 携手走进 OpenCV 的世界

如何利用openCV函数查看opencv版本