點選上方“3D視覺工坊”,選擇“星标”
幹貨第一時間送達
圖像拼接Stitch子產品算法流程與代碼使用介紹
拼接算法
OpenCV從2.4.x版本之後多出來一個新的模型 圖像拼接,該子產品通過簡單的進階API設定,可以獲得比較好的圖像拼接效果,OpenCV官方提供了一個高度內建的API函數 Stitcher,隻要兩行代碼就可以得到一個很好的拼接圖像。
Ptr stitcher = Stitcher::create(mode);
Stitcher::Status status = stitcher->stitch(imgs, pano);
其中第一行代碼是建立拼接Stitcher的指針,第二行代碼是調用拼接算法,
- imgs表示的輸入參數,是一系列Mat對象的vector。
- pano表示的輸出結果,是拼接之後的Mat對象
官方的例子得到效果是非常的好,輸入的images如下:

拼接結果如下:
但是很多人按照官方的例子開始拼接自己的圖像,就是各種掉坑,各種拼接都不出結果,想跟跟上面一樣簡單的調用兩句代碼完成幾乎是個夢,其實這個API裡面有很多參數設定,這個在官方的示範當中都沒有詳細交代,stitching拼接算法 流程圖示如下:
可見圖像拼接是一個很複雜的算法,是由一系列的基礎算法構成,這些基礎算法如果你不是很了解,其實很難實作自己的圖像拼接,這其中影響拼接算法stitch工作最常見幾個算法子子產品為:
特征發現與描述子
常見的特征可以選擇SIFT、SURF、AKAZE、ORB等特征算子進行比對
相機參數
不同的相機參數與設定會導緻不同的結果
融合方式(blender)
不同的融合方式,也會導緻不同結果
- 各種門檻值設定,特别是config threshold,如果無法特征比對,記得把這個門檻值調小點
其它參數可以如何設定可以參考OpenCV的官方文檔,總之無法拼接就去調參數,一般最後都會拼接成功,此外該算法速度比較慢,但是支援GPU執行,是以想要實時的可以嘗試如何GPU下執行,我這裡沒有嘗試 ,誰嘗試過的可以留言分享,我負責置頂。
代碼示範
另外在拼接的時候可以設定不同warper,這樣會對拼接之後的圖像生成不同效果,常見的效果包括
- 魚眼相機
- 環視(平面曲翹)
- 預設
圖示分别如下:
示範代碼如下:
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
vector<string> files;
glob("D:/images/zsxq/1", files);
vector images;for (int i = 0; i printf("image file : %s \n", files[i].c_str());
images.push_back(imread(files[i]));
}// 設定拼接模式與參數
Mat result1, result2, result3;
Stitcher::Mode mode = Stitcher::PANORAMA;
Ptr stitcher = Stitcher::create(mode);// 拼接方式-多通道融合auto blender = detail::Blender::createDefault(detail::Blender::MULTI_BAND);
stitcher->setBlender(blender);// 拼接
Stitcher::Status status = stitcher->stitch(images, result1);// 平面曲翹拼接auto plane_warper = makePtr<:planewarper>();
stitcher->setWarper(plane_warper);
status = stitcher->stitch(images, result2);// 魚眼拼接auto fisheye_warper = makePtr<:fisheyewarper>();
stitcher->setWarper(fisheye_warper);
status = stitcher->stitch(images, result3);// 檢查傳回if (status != Stitcher::OK)
{cout <"Can't stitch images, error code = " <int(status) <endl;return EXIT_FAILURE;
}
imwrite("D:/result1.png", result1);
imwrite("D:/result2.png", result2);
imwrite("D:/result3.png", result3);
waitKey(0);return 0;
}
注意:一起運作速度比較慢!是真的比較慢!
薦讀
聊聊三維重建-條紋法之相位法(一)
那些精貴的3D視覺系統學習資源(附視訊)
吐血整理|3D視覺系統化學習路線
交流群 歡迎加入我們公衆号讀者群一起和同行交流,目前有3D視覺、CV&深度學習、SLAM、三維重建、點雲後處理、自動駕駛等微信群,請掃描下面微信号加群,備注:”研究方向+學校/公司+昵稱“,例如:”3D視覺 + 上海交大 + 靜靜“。請按照格式備注,否則不予通過。添加成功後會根據研究方向邀請進去相關微信群。
▲長按加群
▲長按關注我們