所以我对 OpenCV (2.1) 很陌生,所以请记住这一点。
因此,我设法校准了我正在使用的廉价网络摄像头(带有广角附件),使用棋盘校准方法来产生固有系数和失真系数。
然后我可以毫不费力地将这些值反馈回并生成图像映射,然后我将其应用于视频源以纠正传入的图像。
但是我遇到了一个问题。我知道当它扭曲/校正图像时,它会创建几个倾斜的部分,然后格式化图像以裁剪掉任何黑色区域。那么我的问题是我可以查看完整的扭曲图像,包括一些有黑色区域的区域吗?下面是一个带有倾斜部分的黑色区域的示例,如果我的术语不正确,我试图传达:
可以在这里找到更好地传达我正在谈论的区域的图像!这张图片是在这篇文章中发现的。
目前: cvRemap() 基本上返回上面链接的图像中的黄色框,但我想查看整个图像,因为我希望从中获得相关数据。
我尝试过的: 对图像映射应用比例转换以将完整图像(包括拉伸部分)放入框架中
CvMat *intrinsic = (CvMat*)cvLoad( "Intrinsics.xml" );
CvMat *distortion = (CvMat*)cvLoad( "Distortion.xml" );
cvInitUndistortMap( intrinsic, distortion, mapx, mapy );
cvConvertScale(mapx, mapx, 1.25, -shift_x); // Some sort of scale conversion
cvConvertScale(mapy, mapy, 1.25, -shift_y); // applied to the image map
cvRemap(distorted,undistorted,mapx,mapy);
cvConvertScale,当我认为我已正确对齐 x/y 偏移(猜测/检查)时,它会以某种方式扭曲图像映射,使校正无用。这里可能涉及一些数学,我没有正确遵循/理解。
有没有人有任何其他建议来解决这个问题,或者我可能做错了什么?我也尝试编写自己的代码来解决失真问题,但可以说 OpenCV 已经知道如何做好。