C++ 在OpenCV中使用带findHomography的畸变系数

C++ 在OpenCV中使用带findHomography的畸变系数,c++,opencv,distortion,C++,Opencv,Distortion,我现在迷失在OpenCV文档中,正在寻找一些关于函数排序的指导,或者可能是OpenCV中的一个函数,我还没有读过 我正在跟踪摄像机内的一个激光光点,并将其传送到投影屏幕上的某个位置。到目前为止,我一直在使用findHomography和projectTransform来实现这一点,但是我使用的相机几乎没有失真。现在,我使用的是另一个具有明显径向畸变的相机。我已经使用cvCalibrateCamera获得失真系数、摄像机矩阵等。但我不确定如何在当前过程中使用这些数据,或者我可能需要使用不同的函数和

我现在迷失在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;
Mat-homog;
homog=findHomography(Mat(vCameraPoints)、Mat(vTargetPoints)、CV_RANSAC);
矢量跟踪点;
cvTrackPoint.push_back(Point2f(pMapPoint.fX,pMapPoint.fY));
Mat规范化edimagemat;
透视变换(Mat(cvTrackPoint)、归一化图像Mat、homog);
点2f规范化eDMGPT;
normalizedImgPt=Point2f(normalizedImageMat.at(0,0));
normalizedmgpt.x/=szCameraSize.fWidth;
normalizedmgpt.y/=szCameraSize.fHeight;
然后,我当然会将normalizedmgpt乘以我的投影屏幕分辨率

再一次,我想澄清一下…我确实有来自CalibleCamera的好数据,我如何使用这些信息来考虑镜头畸变?也许上面的过程行不通,有什么帮助吗


谢谢,如果您已经获得了失真系数,那么返回到非失真情况的一个简单(但可能不是最佳)方法就是取消图像失真。无失真图像是具有相似的内在和外在参数但没有镜头畸变的相机将获得的图像。
相应的OpenCV函数是

,感谢您的回复。。我理解你的意思,但是实际上,不失真的图像对我没有多大帮助,因为在正常操作过程中,实际上没有显示摄像头的馈送。我真的希望有一个像projectPoints或UnderstrotPoints这样的函数。我将知道feed/ROI中的x/y,只需要将扭曲值应用于已知的x/y,这样它将是正确的,等等。但是,上面提到的这些功能从对象空间投影到相机的图像空间。另外,findHomography是如何适应的,或者如果上面的功能真的起作用了,它会起作用吗?好吧,我想我不知道你想实现什么,你能更详细地解释一下吗?因为有一个
无失真点
函数,它似乎也能实现我认为您想要的功能。此外,我不明白为什么在正常操作期间是否显示摄像头馈送很重要。