喜歡影像處理的朋友一定不能錯過OpenCV函式庫,哈~如果是喜愛攝影的朋友就去使用影像處理軟體吧!若既喜歡影像處理又熱愛攝影的朋友如我者,兩者都可以嘗試唷!剛剛寫了Ulead COOL 360 影像拼接,這次來研究OpenCV所提供的影像拼接 (Image Stitching)能力如何吧!
首先介紹環境架設,可以參考Visual Studio 2010 安裝 OpenCV 2.4 beta,需要再新增的路徑與檔案如下:
Step5:
Include目錄:
- C:\OpenCV2.4beta\modules\stitching\include\opencv2
- C:\OpenCV2.4beta\modules\stitching\include
Step6:
其他相依性:
- opencv_stitching240d.lib
編譯發生錯誤時:
- #include “opencv2/opencv_modules.hpp"
改為:
- #include “opencv2/opencv.hpp"
即可成功通過編譯。
範例程式來源:C:\OpenCV2.4beta\samples\cpp\stitching.cpp
接著我都會Win + R開啟命令提示字元,然後到專案執行檔的資料夾路徑,再把要處理的圖都進去,接著以指令如:
- StitchTest.exe a.jpg b.jpg c.jpg
a.jpg b.jpg c.jpg三張圖就會兩兩特徵比對,也就是說順序無關,若有更多影像要拼接也可繼續接在其後。
需等待一段時間才有結果,過程陸續會有訊息出現:
Finding features…
Features in image #1: 1250
Features in image #2: 1744
Features in image #3: 1441
Finding features, time: 11.8387 sec
Pairwise matching
1->2 matches: 91->2 matches: 80
1->2 matches: 118
1->2 & 2->1 matches: 162
.1->2 & 2->1 matches: 51
1->2 & 2->1 matches: 136
..Pairwise matching, time: 145.144 sec
Estimating rotations…
Estimating rotations, time: 0.0145659 sec
Initial intrinsic parameters #1:
[466.2391772970087, 0, 400;
0, 466.2391772970087, 267;
0, 0, 1]
Initial intrinsic parameters #2:
[466.2391772970087, 0, 400;
0, 466.2391772970087, 267;
0, 0, 1]
Initial intrinsic parameters #3:
[466.2391772970087, 0, 400;
0, 466.2391772970087, 267;
0, 0, 1]
Camera #1:
[737.0802894092269, 0, 400;
0, 737.0802894092269, 267;
0, 0, 1]
Camera #2:
[735.834675960764, 0, 400;
0, 735.834675960764, 267;
0, 0, 1]
Camera #3:
[742.896895252395, 0, 400;
0, 742.896895252395, 267;
0, 0, 1]
Wave correcting…
Wave correcting, time: 0.0184775 sec
Warping images (auxiliary)…
Warping images, time: 0.259227 sec
Exposure compensation…
Exposure compensation, time: 0.317293 sec
Finding seams…
Finding seams, time: 0.561857 sec
Compositing…
Compositing image #1
Compositing image #2
Compositing image #3
Compositing, time: 1.65429 sec
可見拼接的步驟相當多,而且所花的時間總和也有點久,這時候我們會好奇,OpenCV的Stitching有哪些步驟,這可以看官方網站的Stitching Pipeline:(可點圖放大)
以上步驟可視需求調整,來加快拼接速度。pairwise matching花比較多的時間,因為兩兩比對特徵:

接下來看實驗結果如何,請看:影像拼接實驗 (Image Stitching Experiment)。
參考:OpenCV v2.4.0-beta documentation – Stitching Pipeline。
Comments on: "[OpenCV] 影像拼接 (Image Stitching)" (25)
前輩你好: 我有試出拼接圖,但程式碼中,城市結束後都沒有印出相關紀錄,我發現程式是用
LOGLN 印出,但都沒有印出,我是應該要如何才能讓他印出在螢幕上
LOGLN(“Finding features, time: " << ((getTickCount() – t) / getTickFrequency()) << " sec");
感謝你
讚讚
嗨~你好!
你可以改用cout或是printf試試看喔~
讚讚
hi HappyMan
我也是這麼改
你有跑過多張影像合成圖經驗嗎? 我手邊有 400 (每一張約 7MB) 張空拍圖,要合成一張圖。
程式跑會有問題,很頭痛,只能分開處理,一張縮成 1MB。
讚讚
維度多少呢?感覺非常大呢!OpenCV的函式似乎無法處理維度太高的影像,我有這類經驗,也是跟你一樣縮小影像再來跑程式。
400張7MB的空拍圖喔!這些像片都是你拍攝的嗎?你好像齊柏林,改天你幫他拍「看見台灣二」好了XD~如果這些相片都是你拍攝的,想必你一定很喜歡拍照,那我就有遇到一個同好了呢! 😀
讚讚
不好意思,這方面我是初學者~~
按照你上面的操作~~~
程式範例部分,是直接在 VS2010上新建一project 且 add–>Existing item (stitching.cpp located in opencv 2.4.6)??
我按照上面操作~~
執行結果有誤~~
請問該如何解決??
TKS~
讚讚
首先,你要在VS2010环境下配置好 OpenCV。
讚讚