OpenCV經常使用圖像拼接方法將分爲四個部分與你們共享,這裏是第四種方法,至此四種經常使用方法介紹完畢。ios
OpenCV的經常使用圖像拼接方法(四):基於OpenCV Stitcher類的圖像拼接,OpenCV版本爲4.4.0。特色和適用範圍:圖像需有足夠重合相同特徵區域。優勢:適應部分傾斜/尺度變換和畸變情形,拼接效果好,使用簡單,能夠一次拼接多張圖片。缺點:須要有足夠的相同特徵區域進行匹配,速度較慢(和圖像大小有關,能夠使用GPU加速)。spa
以下是待拼接的兩張圖片:code
源碼與拼接效果圖:blog
// 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; }
拼接效果:圖片