日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cv2 orb 图像拼接_OpenCV 实现多张图像拼接

發(fā)布時間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cv2 orb 图像拼接_OpenCV 实现多张图像拼接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方↑↑↑“OpenCV學堂”關(guān)注我

圖像拼接Stitch模塊算法流程與代碼使用介紹

拼接算法

OpenCV中從2.4.x版本之后多出來一個新的模型 圖像拼接,該模塊通過簡單的高級API設(shè)置,可以獲得比較好的圖像拼接效果,OpenCV官方提供了一個高度集成的API函數(shù)?Stitcher,只要兩行代碼就可以得到一個很好的拼接圖像。

Ptr?stitcher?=?Stitcher::create(mode);
Stitcher::Status?status?=?stitcher->stitch(imgs,?pano);

其中第一行代碼是創(chuàng)建拼接Stitcher的指針,第二行代碼是調(diào)用拼接算法,

  • imgs表示的輸入?yún)?shù),是一系列Mat對象的vector。

  • pano表示的輸出結(jié)果,是拼接之后的Mat對象

官方的例子得到效果是非常的好,輸入的images如下:

拼接結(jié)果如下:

但是很多人按照官方的例子開始拼接自己的圖像,就是各種掉坑,各種拼接都不出結(jié)果,想跟跟上面一樣簡單的調(diào)用兩句代碼完成幾乎是個夢,其實這個API里面有很多參數(shù)設(shè)置,這個在官方的演示當中都沒有詳細交代,stitching拼接算法?流程圖示如下:

可見圖像拼接是一個很復雜的算法,是由一系列的基礎(chǔ)算法構(gòu)成,這些基礎(chǔ)算法如果你不是很了解,其實很難實現(xiàn)自己的圖像拼接,這其中影響拼接算法stitch工作最常見幾個算法子模塊為:

  • 特征發(fā)現(xiàn)與描述子
    常見的特征可以選擇SIFT、SURF、AKAZE、ORB等特征算子進行匹配

  • 相機參數(shù)
    不同的相機參數(shù)與設(shè)置會導致不同的結(jié)果

  • 融合方式(blender)
    不同的融合方式,也會導致不同結(jié)果

  • 各種閾值設(shè)置,特別是config threshold,如果無法特征匹配,記得把這個閾值調(diào)小點

其它參數(shù)可以如何設(shè)置可以參考OpenCV的官方文檔,總之無法拼接就去調(diào)參數(shù),一般最后都會拼接成功,此外該算法速度比較慢,但是支持GPU執(zhí)行,所以想要實時的可以嘗試如何GPU下執(zhí)行,我這里沒有嘗試 ,誰嘗試過的可以留言分享,我負責置頂。

代碼演示

另外在拼接的時候可以設(shè)置不同warper,這樣會對拼接之后的圖像生成不同效果,常見的效果包括

  • 魚眼相機

  • 環(huán)視(平面曲翹)

  • 默認

圖示分別如下:

演示代碼如下:

#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]));
????}//?設(shè)置拼接模式與參數(shù)
????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;
}

注意:一起運行速度比較慢!是真的比較慢!

博觀而約取
厚積而薄發(fā)

推薦閱讀

匯總 | 深度學習中圖像語義分割基準數(shù)據(jù)集詳解

Opencv+TF-Slim實現(xiàn)圖像分類及深度特征提取

如何編譯OpenCV4.1.0支持OpenVINO推斷引擎加速支持

干貨 | 英特爾神經(jīng)網(wǎng)絡(luò)計算棒實現(xiàn)對象檢測加速推理

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的cv2 orb 图像拼接_OpenCV 实现多张图像拼接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。