使用miniflann时出现OpenCV错误 [英] OpenCV Error when using miniflann

查看:246
本文介绍了使用miniflann时出现OpenCV错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在网上找到了此代码..我想尝试一下>

I found this code online .. and I wanted to try it >

int main( int argc, char **argv )
{

VideoCapture cam1, cam2; //Middle and left cameras
//VideoCapture cam3; //Right camera

cam1.open(0);
cam2.open(1);
//cam3.open(2);

cam1.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cam1.set(CV_CAP_PROP_FRAME_HEIGHT, 240);

cam2.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cam2.set(CV_CAP_PROP_FRAME_HEIGHT, 240);

//cam3.set(CV_CAP_PROP_FRAME_WIDTH, 320);
//cam3.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
Mat frm1, frm2;

while(1)
{
    //Step 1: Get frames from a few cameras

    cam1 >> frm1; //Reference plane
    cam2 >> frm2; //Right-side target plane
    // cam3 >> frm3;

    if( frm1.empty()||frm2.empty() )
        break;


    //Step2: SURF detection
    int minHessian = 800;

    SurfFeatureDetector detector( minHessian );
    vector<KeyPoint> keypoints_1, keypoints_2;

    detector.detect( frm1, keypoints_1 );
    detector.detect( frm2, keypoints_2 );

    SurfDescriptorExtractor extractor; ///
    Mat descriptors_1, descriptors_2;
    extractor.compute( frm1, keypoints_1, descriptors_1 );
    extractor.compute( frm2, keypoints_2, descriptors_2 );


    //Step 3: Feature matching
    //-- Matching descriptor vectors with a matcher
    FlannBasedMatcher matcher;
    vector< DMatch > matches;
    matcher.match( descriptors_1, descriptors_2, matches);
    //vector< vector<DMatch> > matches;
    //matcher.knnMatch( descriptors_1, descriptors_2, matches,2);


    double max_dist = 0; double min_dist = 50;


    //-- Quick calculation of max and min distances between keypoints
    for( int i = 0; i < descriptors_1.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 )
    vector< DMatch > good_matches;

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

    Mat img_matches;
    drawMatches( frm1, keypoints_1, frm2, keypoints_2,
                good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
                vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );


    //-- Localize the object from frame1 in frame2
    vector<Point2f> frame1;
    vector<Point2f> frame2;

    for( int i = 0; i < good_matches.size(); i++ )
    {
        //-- Get the keypoints from the good matches
        frame1.push_back( keypoints_1[ good_matches[i].queryIdx ].pt );
        frame2.push_back( keypoints_2[ good_matches[i].trainIdx ].pt );
    }


    //Step 4: RANSAC and Homography

    Mat H = findHomography( Mat(frame2), Mat(frame1), CV_RANSAC, 5.0 );
    cout << "Homography for mapping the r-side plane to the ref. plane: " << endl << H << endl;
    //-- Show detected matches
    imshow("Matches", img_matches );

    //Step 5:Warping

    Mat result;
    warpPerspective(frm2,result,H,Size(3*frm1.cols,1.5*frm1.rows));
    imshow("Warping result",result);
    Mat half(result,Rect(0,0,frm2.cols,frm2.rows));
    frm1.copyTo(half);//Reference image

    //Step 6:Blending

    //Step 7:Showing the panoramic video

    imshow("Blended view",result);
    char c=waitKey(20);
    if (c==27)
        break;
}


return 0;
}

但是,当我尝试运行代码时,我发现了此错误..我也在OpenCV教程中检查了代码,直到findhomography部分,它们几乎完全相同.

However, when I try to run the code, I found this error .. I checked the code in the OpenCV tutorial as well and they are almost exactly the same until the findhomography part.

OpenCV Error: Unsupported format or combination of formats
(type=0) in buildIndex_, file OpenCV-2.3.1/modules/flann/src/miniflann.cpp,
line 297 terminate called after throwing an instance of 'cv::Exception' what()
OpenCV-2.3.1/modules/flann/src/miniflann.cpp:297: error:
(-210) type=0 in function buildIndex_

任何想法在这里可能出什么问题吗?

Any ideas what could went wrong here ?

谢谢

推荐答案

我的老板建议重新启动计算机,因为我使用的是USB相机.再次工作!你猜怎么着?重新启动计算机后,它确实可以正常工作!!!!!!

my boss suggested restarting the computer, since I was using USB-cameras.. he said sometimes you need to restart it in some linux systems like Ubuntu for it to work again! and guess what? it really did work after restarting my computer!!!!!!!!!

这篇关于使用miniflann时出现OpenCV错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆