Sampson Distance using opencv, c++

Sampson Distance using opencv, c++

本文关键字:c++ opencv using Distance Sampson      更新时间:2023-10-16

我正在尝试计算 Sampson distance,即从一个点到相应的外两极线的距离,我将稍后用作错误度量。我正在使用opencv 3.1c++windows-10 visual studio 14

但是函数sampsondistance崩溃了代码:

Point3f point1 = Point3f(keypoints_1[good_matches[iP].queryIdx].pt.x, keypoints_1[good_matches[iP].queryIdx].pt.y, 1.0);
Point3f point2 = Point3f(keypoints_2[good_matches[iP].trainIdx].pt.x, keypoints_2[good_matches[iP].trainIdx].pt.y, 1.0);            
Mat pt1(point1);
Mat pt2(point2);
double sampsonD = sampsonDistance(pt1, pt2, Flist[iF])

我收到错误消息:

OpenCV Error: Assertion failed (_pt1.type() == CV_64F && _pt1.type() == CV_64F && _F.type() == CV_64F) in cv::sampsonDistance, file D:opencvsourcesmodulescalib3dsrcfundam.cpp, line 1043

文档说:

double cv::sampsonDistance  ( InputArray  pt1,  
InputArray  pt2,  
InputArray  F  
) 

我如何使用此功能,我真的不理解输入阵列的用法,在上面,我将一个3D点转换为我认为的2D均匀坐标,存储为CV :: MAT。基本矩阵存储在3x3 cv :: mat。

从错误消息中,点和基本矩阵必须为 CV_64F(双型)。

对于要点,应该是:

Point3d point1 = Point3d(keypoints_1[good_matches[iP].queryIdx].pt.x, keypoints_1[good_matches[iP].queryIdx].pt.y, 1.0);
Point3d point2 = Point3d(keypoints_2[good_matches[iP].trainIdx].pt.x, keypoints_2[good_matches[iP].trainIdx].pt.y, 1.0);