Утверждение OpenCV не удалось с помощью брошюровщика

Я пишу программу, которая принимает видео в качестве входных данных и возвращает панорамное изображение. Я выполняю этот код:

vector< Mat > vImg;
Mat rImg;
Mat img;



VideoCapture cap("../Debug/vid/vid.avi");

if (!cap.isOpened())
{
    cout << "Can't open video";
    waitKey(0);
    return ;
}


//default stitcher
Stitcher stitcher = Stitcher::createDefault(true);

//set orb finder
Ptr<FeaturesFinder> finder=new OrbFeaturesFinder();
stitcher.setFeaturesFinder(finder); 

//set seam resolution
stitcher.setSeamEstimationResol(0.08);

//set confidence threshold
stitcher.setPanoConfidenceThresh(0.5);

//set warper
Ptr<WarperCreator> warper = new cv::PlaneWarper();
stitcher.setWarper(warper);

//set exposure compensation
Ptr<ExposureCompensator> exposure_compensator = ExposureCompensator::createDefault(ExposureCompensator::GAIN);
stitcher.setExposureCompensator(exposure_compensator);


//set seam finder
Ptr<SeamFinder> seam_finder = new DpSeamFinder(DpSeamFinder::COLOR_GRAD);
stitcher.setSeamFinder(seam_finder);

//set matcher
Ptr<FeaturesMatcher> matcher = new BestOf2NearestMatcher(true);
stitcher.setFeaturesMatcher(matcher);


//sett wave correction
stitcher.setWaveCorrection(true);

cap >> img;
vImg.push_back(img);
vImg.push_back(img);    



int counter = 1;



while (counter < total_frames)
{

    Mat img_loop;

    cap >> img_loop;


    vImg.at(1) = img_loop;



    stitcher.stitch(vImg, rImg);


    if (rImg.rows>0 && rImg.cols>0)
    {
        imshow("debug", rImg);      


        vImg.at(0) = rImg;
    }



    rImg = NULL;


    counter ++;

}

но это дает мне ошибку "Ошибка подтверждения (dims <=2 && data ...)". В чем может быть проблема?

Я использую сообщество Visual Studio 2013, OpenCV 2.4.10 и Windows 7 x64

РЕДАКТИРОВАТЬ Добавлен "стек вызовов"

    KernelBase.dll!_RaiseException@16() 
Unknown>        msvcr120d.dll!_CxxThrowException(void *pExceptionObject, const_s__ThrowInfo * pThrowInfo) Riga 154  C++
    opencv_core2410d.dll!774ec7f8() Sconosciuto

РЕДАКТИРОВАТЬ Я заметил, что если я сшить 2 одинаковых изображения, это дает мне ошибку. Это нормально?

2 ответа

Решение

Я решил внедрить руководство по сшиванию конвейера. Спасибо вам всем!

Если проблема связана с выделением памяти, вы можете попытаться объявить свой вектор статическим.

static vector<Mat> vImg;

Я не уверен в этом, но я столкнулся с этой проблемой при выделении огромного массива, и этот трюк решил мою проблему вместо использования указателей.

Я надеюсь, что это помогает.

Другие вопросы по тегам