Я пишу программу, которая принимает видео в качестве входных данных и возвращает панорамное изображение. Я выполняю этот код:
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.
EDIT Добавлен "стек вызовов"
KernelBase.dll!_RaiseException@16()
Unknown> msvcr120d.dll!_CxxThrowException(void *pExceptionObject, const_s__ThrowInfo * pThrowInfo) Riga 154 C++
opencv_core2410d.dll!774ec7f8() Sconosciuto
РЕДАКТИРОВАТЬ Я заметил, что если я сшиваю 2 одинаковых изображения, это дает мне ошибку. Это нормально?
waitkey(10)
, но это не должно приводить к ошибке утверждения - person api55   schedule 19.03.2015Stitcher::Status
, который может быть приведен как int) - person api55   schedule 19.03.2015cap >> img_loop; cap >> img_loop2; cap >> img_loop3; vImg.at(1) = img_loop; vImg.at(2) = img_loop2; vImg.at(3) = img_loop3;
, и это дает мне ошибку нехватки памяти. - person bjorn   schedule 20.03.2015Stitcher::createDefault(false);
- person api55   schedule 20.03.2015Stitcher::createDefault(false);
, но выдает ошибку о нехватке памяти. Может быть, изображения слишком похожи? - person bjorn   schedule 20.03.2015OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si ze.p[0] && (unsigned)i1 < (unsigned)size.p[1] && type() == DataType<_Tp>::type) in cv::Mat_<int>::operator (), file C:\builds\2_4_PackSlave-win32-vc12-shared\op encv\modules\core\include\opencv2/core/mat.hpp, line 993
- person bjorn   schedule 20.03.2015OpenCV Error: Insufficient memory (Failed to allocate 501945556 bytes) in cv::Ou tOfMemoryError, file C:\builds\2_4_PackSlave-win32-vc12-shared\opencv\modules\co re\src\alloc.cpp, line 52
- person bjorn   schedule 20.03.2015