我正在做图像stiching,我有下一个问题。
BFMatcher matcher(NORM_HAMMING, true);
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
double max_dist = 0; double min_dist = 100;
//-- Quick calculation of max and min distances between keypoints
cout<< "descr " << descriptors_1.rows << endl ;
for( int i = 0; i < descriptors_1.rows; i++ )
{
double dist = matches[i].distance;
//cout<<"La distancia es " << i<<endl;
if( dist < min_dist && dist >3)
{
min_dist = dist;
}
if( dist > max_dist) max_dist = dist;
}
我要求一个Matcher,在这种情况下是一个BruteForce Matcher,当我获得关键点之间的最小和最大距离时,程序崩溃了。我知道问题在于
matches[i].distance;
因为这个对象是NULL的东西。问题是我不知道如何检查匹配[i]是否存在。
答案 0 :(得分:3)
据我所知,BFMatcher :: match()将匹配插入其第三个参数(一个std :: vector),作为第一个和第二个参数中的行数(我希望行数相等)。
在这种情况下,你的猜测可能不是崩溃的原因。
无论如何,要获得向量的大小:matches.size()将为您提供存储在向量中的DMatch对象的数量。