C++ OpenCV错误的解决方案:不支持的格式或格式组合-将ORB功能与FlannBasedMatcher匹配时

C++ OpenCV错误的解决方案:不支持的格式或格式组合-将ORB功能与FlannBasedMatcher匹配时,c++,opencv3.0,orb,C++,Opencv3.0,Orb,我尝试使用ORB查找好的匹配项。我的代码如下: Ptr<FeatureDetector> detector = ORB::create(); Mat descriptors_img1, descriptors_img2; //-- Step 2: Calculate descriptors (feature vectors) detector->detect(img1, kp1,descriptors_img1); detector->detect(img2, kp2

我尝试使用ORB查找好的匹配项。我的代码如下:

Ptr<FeatureDetector> detector = ORB::create();
Mat descriptors_img1, descriptors_img2;


//-- Step 2: Calculate descriptors (feature vectors)
detector->detect(img1, kp1,descriptors_img1);
detector->detect(img2, kp2,descriptors_img2);


Ptr<DescriptorExtractor> extractor = ORB::create();
extractor->compute(img1, kp1, descriptors_img1 );
extractor->compute(img2, kp2, descriptors_img2 );
//-- Step 3: Matching descriptor vectors using FLANN matcher
descriptors_img1.convertTo(descriptors_img1, CV_32F);
descriptors_img2.convertTo(descriptors_img2, CV_32F);
FlannBasedMatcher matcher;
std::vector<DMatch> matches;
matcher.match(descriptors_img1,descriptors_img2,matches);
double max_dist = 0; double min_dist = 100;

//-- Quick calculation of max and min distances between keypoints
for( int i = 0; i < descriptors_img1.rows; i++ )
{
    double dist = matches[i].distance;
    if( dist < min_dist )
        min_dist = dist;
    if( dist > max_dist )
        max_dist = dist;
}

printf("-- Max dist : %f \n", max_dist );
printf("-- Min dist : %f \n", min_dist );

//-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist )
std::vector< DMatch > good_matches;

for( int i = 0; i < descriptors_img1.rows; i++ )
{
    if( matches[i].distance < 3*min_dist )
    {
        good_matches.push_back( matches[i]);
    }
}

Mat img_matches;
drawMatches(img1,kp1,img2,kp2,good_matches,img_matches,Scalar::all(-1),
        Scalar::all(-1),vector<char>(),DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Show detected matches
imshow( "Good Matches", img_matches );
请帮我解决这个问题。提前谢谢。我解决了这个错误。 您只需修改代码

Ptr<ORB> detector = ORB::create()
Ptr检测器=ORB::create()
而不是

Ptr<FeatureDetector> detector = ORB::create();
Ptr检测器=ORB::create();
然后它对我起了作用。

我解决了这个错误。 您只需修改代码

Ptr<ORB> detector = ORB::create()
Ptr检测器=ORB::create()
而不是

Ptr<FeatureDetector> detector = ORB::create();
Ptr检测器=ORB::create();

然后它对我起了作用。

请在你的问题中包含错误消息。现在我编辑并包含了错误消息。我已经用OpenCV3.2和VC14测试了你的代码,但效果很好。您确定您提供的代码仍然存在此错误吗?请在问题中包含错误消息。现在,我编辑并包含了错误消息。我已使用OpenCV3.2和VC14测试了您的代码,但效果良好。您确定您提供的代码仍然存在此错误吗?