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; }
拼接效果: