В настоящее время я играю с камерой на 360 ° и хочу использовать сферическую оплочку OpenCV для этого. Однако каждый раз, когда я пытаюсь запустить простую программу, которая использует функциональность строчки, она не может вернуть сшитое изображение. Я просто фотографирую на 360 °, делю на две отдельные фотографии (передний и задний объектив) и хочу сшить их вместе.Сшиватель OpenCV (C++), не записывающий в OutputArray
Вот код:
Mat srcImage = imread("assets/360_0043.JPG");
Mat frontLensImage(srcImage, Rect(0, 0, srcImage.cols/2, srcImage.rows));
Mat rearLensImage(srcImage, Rect(srcImage.rows, 0, srcImage.cols/2, srcImage.rows));
vector<Mat> imagesToStitch;
imagesToStitch.push_back(frontLensImage);
imagesToStitch.push_back(rearLensImage);
Mat panorama;
Stitcher stitcher = Stitcher::createDefault();
if(!imagesToStitch.empty()){
stitcher.stitch(imagesToStitch, panorama);
imshow("test", panorama);
waitKey(0);
}
else{
cout << "ERROR: Image array empty" << endl;
}
return 0;
При попытке запуска, он возвращает эту ошибку:
OpenCV Error: Assertion failed (ssize.area() > 0) in resize, file /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp, line 1834
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/imgwarp.cpp:1834: error: (-215) ssize.area() > 0 in function resize
При отладке panorama
является пустым объектом, даже если я прохожу его как OutputArray
к stitcher.stitch
, Я тщательно искал в Интернете и не мог найти решение, поэтому любая помощь будет принята с благодарностью!
Не должно быть: 'Mat rearLensImage (srcImage, Rect (srcImage.cols/2, 0, srcImage.cols/2, srcImage.rows));'? Однако вам нужно, чтобы изображения перекрывались ... поэтому вы можете попробовать: «Mat frontLensImage (srcImage, Rect (0, 0, 3 * srcImage.cols/4, srcImage.rows)); Mat rearLensImage (srcImage, Rect (srcImage.cols/4, 0, 3 * srcImage.cols/4, srcImage.rows)); ' – Miki
Спасибо за быстрый ответ! Я не знал о перекрытии, так что это хорошо знать. Тем не менее, он по-прежнему не работает с вашим кодом. Я получаю эту ошибку: 'Assertion failed (size.width> 0 && size.height> 0) в imshow' – neobanshee