喜歡影像處理的朋友一定不能錯過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)
hi ca you share your project folder my mail address is gkhansky@hotmail.com thanks for helps
讚讚
I have sent the mail and attached my project to you. 🙂
讚讚
抱歉再請問一下,我有嘗試將不同的圖片做拼接,有些成功就返回0,有些無法拼接就返回-1,但還有一種情況是直接出現"錯誤訊息視窗",上面寫著
“於 0x7c812fd3 (kernel32.dll) 的 opencv2.4.4_vc2010_stiching.exe 中發生未處理的例外狀況: Microsoft C++ 在記憶體位置 0x0011e8e8,發生例外狀況: cv::Exception"
請問您知道是什麼原因嗎?
或是方便我傳兩張圖給您,可否請您用stitching.cpp幫我測試看看。感謝~
讚讚
不知道你是否方便寄成功拼接的相片嗎?
我在猜可能是因為這兩張圖太過相似,
所以程式可能會忽略處理~
這是我之前遇過的問題,
不過你錯誤訊息上是關於記憶體存取,
應該是另一種問題吧~
可以嘗試多拍些相片來測試,
有以上錯誤訊息應該有類似的徵兆。
讚讚
您好,請問為何我的程式執行後,都無法顯示程式內LOGLN(“xxx");這些指令的訊息呢,還是並不是顯示在命令提示字元視窗?感謝回覆~~
讚讚
你可以改用printf,或cout輸出看看~
讚讚
这个我知道!程序里面有一个宏定义:#if ENABLE_LOG,你要自己把ENABLE_LOG设置为1才能输出~~~不然如果自己改成printf或cout,那太麻烦了~~~
讚讚
哇~謝謝你提供的解決方法!真令人佩服~ 😀
讚讚
請問我的版本是vc 2005 是不是就不能用了?
讚讚
可能要試試看才知道能不能~基本上建議你使用最新的版本來裝OpenCV,不然新的OpenCV可能不能在舊的IDE上work~你可以參考VC 2010或VC 2012我安裝教學文喔! 😀
讚讚
我想請問一下,在Ubuntu下安裝OpenCV2.4,Stitching source code在/OpenCV-2.4.0/modules/stitching/src 下,那這部分的code可以自行修改再用makefile編譯嗎?
之前測試stitching的時候只include他的hpp檔就能使用,如果要修改內部是這樣修改再make嗎?
讚讚
當然可以修改code,
看你要做出介面還是其它邏輯應用都可。
至於makefile我不太懂它的原理,
就要請你自己測試了:)
讚讚
可以提供 StitchTest.exe 來試玩一下嘛?
讚讚
可以提供給你,但是若你沒有安裝OpenCV的話,也無法順利執行,因為我產生出來的.exe檔是有相依性的喔!還是建議你可以按照我的環境設定來跑程式,可以最紮實得到學習效果,未來還可以玩出各式各樣的創意。
讚讚
your blog is very useful to me. Thank you so much!
讚讚
Thank you for visiting my blog^^ You are welcome.
讚讚
[…] 環境設定參考:影像拼接 (Image Stitching) […]
讚讚
[…] 環境設定可直接參考:影像拼接 (Image Stitching)。 […]
讚讚
[…] 經過影像拼接 (Image Stitching)的介紹與過程,這裡我們還要來做影像拼接實驗 (Image Stitching Experiment)。 […]
讚讚