OpenCV: ошибка при попытке прошить изображения
Я пытаюсь создать вид панорамы, используя Stitcher::stitch
функция на OpenCV.
Я делаю около 24 снимков, чтобы сшить их, но окончательный результат (Status = OK) - это изображение 1x1 (черный пиксель).
Если я удаляю некоторые изображения, все работает нормально, но, возможно, мне не хватает некоторых частей изображения.
Что я делаю плохо? Заранее спасибо.
Обновить:
Я пытаюсь добавить rois, получая 50% каждого изображения. Для первого изображения я беру нужные 50%. Для последних слева 50%, а для остальных я беру 50% слева и 50% справа:
vector<Mat> imgs;
imgs.push_back(imread("/Users/myImages/IMG_0073.jpg"));
imgs.push_back(imread("/Users/myImages/IMG_0074.jpg"));
imgs.push_back(imread("/Users/myImages/IMG_0075.jpg"));
imgs.push_back(imread("/Users/myImages/IMG_0076.jpg"));
imgs.push_back(imread("/Users/myImages/IMG_0077.jpg"));
imgs.push_back(imread("/Users/myImages/IMG_0078.jpg"));
processImage(imgs);
и моя функция:
void processImage (vector imgs) {
vector<vector<Rect>> rois;
vector<Rect> roisVect;
for (int j = 0; j < imgs.size(); j++) {
if (j == 0) {
Rect rect1 = Rect(imgs.at(j).cols*50/100, 0, imgs.at(j).cols*50/100,imgs.at(j).rows);
roisVect.push_back(rect1);
rois.push_back(roisVect);
roisVect.clear();
} else if (j == imgs.size() - 1) {
Rect rect2 = Rect(0, 0, imgs.at(j).cols*50/100, imgs.at(j).rows);
roisVect.push_back(rect2);
rois.push_back(roisVect);
roisVect.clear();
} else {
Rect rect3 = Rect(imgs.at(j).cols*50/100, 0, imgs.at(j).cols*50/100, imgs.at(j).rows);
Rect rect4 = Rect(0, 0, imgs.at(j).cols*50/100, imgs.at(j).rows);
roisVect.push_back(rect4);
roisVect.push_back(rect3);
rois.push_back(roisVect);
roisVect.clear();
}
}
Mat pano;
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
Stitcher::Status status = stitcher.stitch(imgs, rois, pano);
cout << endl << status;
cout << endl << pano.size();
if (!pano.empty())
imshow("pano", pano);
waitKey(10);
imwrite("/Users/myImages/final" + to_string(imgs.size()) + ".jpg", pano);
}
И мои результаты (cout):
0 // (ОК)
[1 х 1]