我想计算两个图像对之间的基本矩阵。为此,我使用通过cv::FlannBasedMatcher
. 之后我打电话cv::findFundamentalMat(left_pts, right_pts, CV_RANSAC, 2.0, 0.99, ransac_mask)
给找到的匹配项。
为了可视化计算的基本矩阵,我想绘制极线。为此,我尝试cv::computeCorrespondEpilines
使用 Point 进行手动乘法并提取结果线方程(ax + by + c = 0)。
为了绘制线条,我只需使用剪断的线条(我在许多其他示例中都找到了)
for (cv::vector<cv::Vec3f>::const_iterator it = lines1.begin(); it!=lines1.end(); ++it)
{
cv::line(left_new,
cv::Point(0,-(*it)[2]/(*it)[1]),
cv::Point(left.cols,-((*it)[2] + (*it)[0]*left.cols)/(*it)[1]),
cv::Scalar(255,255,255));
}
但对应点不在核线上。我什至在已经校正的图像上尝试过,但线条不是水平的。
现在我也测试了这个例子: http: //opencv-cookbook.googlecode.com/svn/trunk/Chapter%2009/estimateF.cpp 只是发现它有同样的问题。
有人可以分享这样一个用例的工作示例或给我一个提示可能会出现什么问题吗?(匹配似乎很好,所以它必须与实际估计相符)