在OpenCV中使用失真系数和findHomography

时间:2014-01-15 20:54:19

标签: c++ opencv distortion

我目前迷失在OpenCV文档中,正在寻找关于函数可能排序的一些指导,或者是OpenCV中的一个功能,我还没有完成这个功能......

我正在跟踪摄像机内的激光斑点到投影屏幕上的某个位置。到目前为止,我一直在使用findHomography然后使用projectTransform来实现这一点,但是我使用的相机几乎没有失真。现在我正在使用具有明显径向失真的不同相机。我已经使用cvCalibrateCamera来获取失真系数,相机矩阵等,但我不确定如何将这些数据用于我当前的过程,或者我可能需要使用OpenCV的不同功能和/或功能排序。任何建议将不胜感激......

我当前的代码运行良好(没有失真)如下:

Mat homog;
homog = findHomography(Mat(vCameraPoints), Mat(vTargetPoints), CV_RANSAC);

vector<Point2f> cvTrackPoint;
cvTrackPoint.push_back(Point2f(pMapPoint.fX, pMapPoint.fY));                        

Mat normalizedImageMat;
perspectiveTransform(Mat(cvTrackPoint), normalizedImageMat, homog);

Point2f normalizedImgPt;
normalizedImgPt = Point2f(normalizedImageMat.at<Point2f>(0,0));
normalizedImgPt.x /= szCameraSize.fWidth;
normalizedImgPt.y /= szCameraSize.fHeight;

然后我当然将normalizedImgPt乘以我的投影屏幕分辨率

再说一次,只是为了澄清......我确实有来自calibrateCamera的好数据,我如何使用这些信息来考虑镜头失真?也许上述过程不起作用,有什么帮助吗?

先谢谢

1 个答案:

答案 0 :(得分:1)

如果你已经获得了失真系数,那么回到非失真情况的一种简单(但可能是次优的)方法是使图像失真。未失真的图像是具有类似内在和外在参数但没有镜头扭曲的相机会获得的图像。 相应的OpenCV函数为undistort