使用opencv,c ++的桑普森距离
Posted
技术标签:
【中文标题】使用opencv,c ++的桑普森距离【英文标题】:Sampson Distance using opencv, c++ 【发布时间】:2016-06-17 16:09:54 【问题描述】:我正在尝试计算Sampson distance
,即从一个点到它对应的极线的距离,稍后我将用作误差度量。我正在使用opencv 3.1
、c++
和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:\opencv\sources\modules\calib3d\src\fundam.cpp, line 1043
文档说:
double cv::sampsonDistance ( InputArray pt1,
InputArray pt2,
InputArray F
)
如何使用这个函数,我不太了解输入数组的用法,在上面我将一个 3d 点转换为我认为存储为 cv::Mat 的 2D 齐次坐标。基本矩阵存储在 3x3 cv::Mat 中。
【问题讨论】:
【参考方案1】:从错误信息来看,点和基本矩阵必须是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);
【讨论】:
谢谢,似乎解决了它。以上是关于使用opencv,c ++的桑普森距离的主要内容,如果未能解决你的问题,请参考以下文章