cv2 orb 图像拼接_OpenCV 实现多张图像拼接
點擊上方↑↑↑“OpenCV學堂”關注我
圖像拼接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;
}
注意:一起運行速度比較慢!是真的比較慢!
博觀而約取
厚積而薄發
推薦閱讀
匯總 | 深度學習中圖像語義分割基準數據集詳解
Opencv+TF-Slim實現圖像分類及深度特征提取
如何編譯OpenCV4.1.0支持OpenVINO推斷引擎加速支持
干貨 | 英特爾神經網絡計算棒實現對象檢測加速推理
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的cv2 orb 图像拼接_OpenCV 实现多张图像拼接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r语言平均值显著性检验_8小时整理!t检
- 下一篇: java stream 多个filter