OpenCV常用图像拼接方法(四):基于Stitcher类拼接
OpenCV常用图像拼接方法将分为四个部分与大家共享,这里是第四种方法,至此四种常用方法介绍完毕。
OpenCV的常用图像拼接方法(四):基于OpenCV Stitcher类的图像拼接,OpenCV版本为4.4.0。特点和适用范围:图像需有足够重合相同特征区域。优点:适应部分倾斜/尺度变换和畸变情形,拼接效果好,使用简单,可以一次拼接多张图片。缺点:需要有足够的相同特征区域进行匹配,速度较慢(和图像大小有关,可以使用GPU加速)。
如下是待拼接的两张图片:
源码与拼接效果图:
// 04_Image_Stitch_With_StitcherClass.cpp // 环境 VS2017 + OpenCV4.4.0 // 功能介绍:基于OpenCV Stitcher类进行图像拼接 // 特点:图像需有足够重合相同特征区域 // 优点:适应部分倾斜/尺度变换和畸变情形,拼接效果好,使用简单 // 缺点:需要有足够的相同特征区域进行匹配,速度较慢(和图像大小有关,可以使用GPU加速) #include "pch.h" #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Stitcher::Mode mode = Stitcher::PANORAMA; //Stitcher::Mode mode = Stitcher::SCANS; vector<Mat> imgs; Mat img1 = imread("04.jpg"); Mat img2 = imread("05.jpg"); if (img1.empty() || img2.empty()) { cout << "Read image failed, please check again!" << endl; return 1; } imgs.push_back(img1); imgs.push_back(img2); string result_name = "result.jpg"; Mat pano; Ptr<Stitcher> stitcher = Stitcher::create(mode); Stitcher::Status status = stitcher->stitch(imgs, pano); if (status != Stitcher::OK) { cout << "Can't stitch images, error code = " << int(status) << endl; return 1; } imwrite(result_name, pano); cout << "stitching completed successfully\n" << result_name << " saved!"; return 0; }
拼接效果: