Just My Life & My Work

喜歡影像處理的朋友一定不能錯過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: 9

1->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)

  1. 前輩你好: 我有試出拼接圖,但程式碼中,城市結束後都沒有印出相關紀錄,我發現程式是用

    LOGLN 印出,但都沒有印出,我是應該要如何才能讓他印出在螢幕上

    LOGLN(“Finding features, time: " << ((getTickCount() – t) / getTickFrequency()) << " sec");

    感謝你

    • 嗨~你好!
      你可以改用cout或是printf試試看喔~

      • hi HappyMan

        我也是這麼改

        你有跑過多張影像合成圖經驗嗎? 我手邊有 400 (每一張約 7MB) 張空拍圖,要合成一張圖。
        程式跑會有問題,很頭痛,只能分開處理,一張縮成 1MB。

        • 維度多少呢?感覺非常大呢!OpenCV的函式似乎無法處理維度太高的影像,我有這類經驗,也是跟你一樣縮小影像再來跑程式。
          400張7MB的空拍圖喔!這些像片都是你拍攝的嗎?你好像齊柏林,改天你幫他拍「看見台灣二」好了XD~如果這些相片都是你拍攝的,想必你一定很喜歡拍照,那我就有遇到一個同好了呢! 😀

  2. 不好意思,這方面我是初學者~~
    按照你上面的操作~~~
    程式範例部分,是直接在 VS2010上新建一project 且 add–>Existing item (stitching.cpp located in opencv 2.4.6)??
    我按照上面操作~~
    執行結果有誤~~
    請問該如何解決??
    TKS~

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: