Как сшить изображения в C++?
Я перепробовал много кодов и даже много веб-сайтов, но я получаю только один код, который использует функцию stitcher opencv. В этой функции нет никаких проблем, но главная проблема заключается в том, что я могу загрузить только одно изображение в стежок. Таким образом, из-за этого код завершается с исключением. Пожалуйста, помогите!
Что я уже пробовал:
Приведенный ниже код-это код, приведенный почти на всех сайтах, но он не работает правильно.
Статуи линейного стежка генерируют ошибку, что загружено только одно изображение. Итак, из-за этого код не работает. Пожалуйста, помогите мне с правильным кодом.
Код, который я использовал, выглядит следующим образом:
#include <iostream> #include <fstream> #include "opencv2/highgui/highgui.hpp" #include "opencv2/stitching/stitcher.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/core/core.hpp" using namespace std; using namespace cv; bool try_use_gpu = false; bool divide_images = false; // Define mode for stitching as panoroma // (One out of many functions of Stitcher) //Stitcher:: mode = Stitcher::composePanorama; string result_name = "result.jpg"; // Array for pictures vector<mat> imgs; // methods int main(int argc, char* argv[]) { // Get all the images that need to be // stitched as arguments from command line for (int i = 1; i < 3; ++i) { // Read the ith argument or image // and push into the image array Mat img = imread("C:\\Users\\leno\\Documents\\640x480dove\\OCR_REF\\FONT-0.bmp",IMREAD_GRAYSCALE); Mat img1 = imread("C:\\Users\\leno\\Documents\\640x480dove\\OCR_REF\\FONT-1.bmp", IMREAD_GRAYSCALE); Mat img2 = imread("C:\\Users\\leno\\Documents\\640x480dove\\OCR_REF\\FONT-2.bmp", IMREAD_GRAYSCALE); if (img.empty()) { // Exit if image is not present cout << "Can't read image '" << img << "'\n"; return -1; } imgs.push_back(img); if (img1.empty()) { // Exit if image is not present cout << "Can't read image '" << img << "'\n"; return -1; } imgs.push_back(img1); if (img2.empty()) { // Exit if image is not present cout << "Can't read image '" << img << "'\n"; return -1; } imgs.push_back(img2); } // Define object to store the stitched image Mat pano; // Create a Stitcher class object with mode panoroma //Ptr<stitcher> stitcher = Stitcher::create( try_use_gpu); Stitcher stitcher = Stitcher::createDefault(false); // Command to stitch all the images present in the image array Stitcher::Status status = stitcher.stitch(imgs, pano); if (status != Stitcher::OK) { // Check if images could not be stiched // status is OK if images are stiched successfully cout << "Can't stitch images\n"; return -1; } // Store a new image stiched from the given //set of images as "result.jpg" imwrite("result.jpg", pano); // Show the result imshow("Result", pano); waitKey(0); return 0; }
Richard MacCutchan
В чем заключается ошибка и почему вы запускаете один и тот же код 3 раза?
11917640 Member
Это твой настоящий код? вектор<mat> imgs; и Mat img = ... Похоже на разные типы. Покажите свой фактический код и точное сообщение об ошибке.