Member 13411007 Ответов: 1

Как сшить изображения в 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 = ... Похоже на разные типы. Покажите свой фактический код и точное сообщение об ошибке.

1 Ответов

Рейтинг:
0

KarstenK

Вы должны знать ПОЧЕМУ? ваш код не работает. Может быть, файлов там нет, или ваш цикл не имеет смысла. Почему вы загружаете 3 файла 3 раза?

Вы должны научиться пользоваться отладчик для вашего кода.


Member 13411007

это не из-за петли. Я также использовал код без цикла. Ошибка продолжалась по той же причине. Цикл-это не ерунда, я достаточно хорошо выучил свой код, и файлы находятся там в соответствующей папке.

Member 13411007

вы должны знать, почему я поставил цикл, если вы хорошо изучили код. Спасибо.