這里面都是一些比較雜的東西,沒什么實際意義。主要是為了,后面能跑一個程序:
Stitcher:
摳細節:
http://docs.opencv.org/2.4.2/modules/stitching/doc/high_level.html?highlight=stitcher#stitcher
Stitcher是啥?
class Stitcher
High level image stitcher. It’s possible to use this class without being aware of the entire stitching pipeline. However, to be able to achieve higher stitching stability and quality of the final images at least being familiar with the theory is recommended (see Stitching Pipeline).
拼接類:
高級圖像拼接類。在不了解完整拼接流程的情況下使用該類是可行的。然而,為了能夠得到更高的拼接穩定性和質量關於最終生成的圖像,至少還是應該熟悉一下(拼接流程)這個理論。
然后是源碼啦~這個參考這篇文章以及opencv的源碼比較好。
類一:
函數一:

Stitcher類的createDefault函數。
創建一個無參拼接類對象。
C++: Stitcher Stitcher::createDefault(bool try_use_gpu=false)
參數:嘗試使用gpu。我想他的結果跟register和inline一樣,能用最好,不能用,就將就。
返回:拼接類的實例對象。
函數二:

Stitcher類的estimateTransform函數。
該函數嘗試通過給出的圖像來估算每張照片由相機帶來的旋轉。
注記:
如果熟悉拼接流程的話,可以使用這個函數,如果不熟悉的話,還是用Stitcher::stitch()吧。
C++:Status Stitcher::estimateTransform(InputArray images)
這個Status是一個返回值,查找后發現他是一個枚舉類型。在stitcher.hpp下。
enum Status { OK, ERR_NEED_MORE_IMGS };//可以,錯誤_需要_更多_圖片。兩個可供選擇的值。
參數:images-輸入的圖片
rois-興趣矩形區域
返回值:狀態代碼
函數三:

Stitcher類的composePanorama函數。//合成全景圖
這個函數是在 圖像預估變換還未進行的假設下 嘗試把所有給出的圖像(或者存儲在其他函數調用內部的圖片)拼接到最終的全景圖中。
注記:
最好使用Stitcher::stitch() 函數除非你知曉拼接流程。
參數:iamges-輸入圖片
pano-最終全景圖
返回:狀態碼
關於這個InputArray和 OutputArray
f:\opencv249\opencv\build\include\opencv2\core\core.hpp
在core.hpp 里面這樣描述的:
typedef const _InputArray& InputArray;
typedef const _OutputArray& OutputArray;
面這然后在核心庫里面有更多的對於輸入輸出的這個數組的描述。
現在先把大體順下去。
函數四:

Stitcher的stitch函數
這個函數是用來嘗試拼接給出的圖片。
參數:iamges-輸入圖片
rois- 興趣矩形區域
pano-最終全景圖
返回:狀態碼
類二:

Warper:翻譯過來是這個東西:整經機、整經工。
Warp:經紗,彎曲,使彎曲。
整經機:整經機用於整經。
整經:將一定根數的經紗按規定的長度和寬度平行卷繞在經軸或織軸上的工藝過程。經過整經的經紗供漿紗和穿經之用。
經紗:
名詞:沿織機長度方向延伸的一串紗,由此紗紡成織物沿長度方向的線,常常捻得比填紗緊。
動詞:織布之前,把紡好的紗或線密密地綳起來,來回梳整,使成為經紗或經線。
我覺得太多就沒有必要了,還是從整經這個概念上走,如果把畫比作經紗就好理解了。照片是凌亂的,每一部分都不挨着,所以需要規律化,那么這個規律化得有一個東西來完成,作者起了一個名字叫做整經機。從這個意義上理解,可能是通的。
先繼續往下看,【不小心在百度的時候看到了這個:
http://baike.baidu.com/link?url=KzoBMNgHVChM-fgu_4aG8gsh8EgDmwDg9Fe94a-fiwkKIyizkEqUkXjfzbw6Bd15xT0VZuakTgAcpJaPJfQeR_
】
再結合軸經、分條、分段、球經,以及planewarper、cylindricalwarper、sphericalwarper標題我覺得就是這個東西了。
這樣三種類型的整經機都繼承了整經機創造者。//整經機用來規律化我們的輸入的圖片。

1、所以當下為了實現拼接,我們需要完善幾個事兒,整經機的實現類
http://docs.opencv.org/2.4.2/modules/stitching/doc/warpers.html#detail::PlaneWarper : public detail::RotationWarperBase<PlaneProjector>
2、拼接流程
http://docs.opencv.org/2.4.2/modules/stitching/doc/introduction.html#stitching-pipeline
3、不妨先按照最基本的stitch先實現一把。
【已經實現】
所以可以試着先把最簡單的這個stitch跑一下。
stitchpipeline:
http://docs.opencv.org/2.4.2/modules/stitching/doc/introduction.html#stitching-pipeline
應該在哪里有翻譯的吧,這么看很慢的。。。
This figure illustrates the stitching module pipeline implemented in the Stitcher class. Using that class it’s possible to configure/remove some steps, i.e. adjust the stitching pipeline according to the particular needs. All building blocks from the pipeline are available in the detail namespace, one can combine and use them separately.
The implemented stitching pipeline is very similar to the one proposed in [BL07].

下面這張圖闡釋了在stitcher類里面的拼接模型的實現過程。使用這個類是可以配置或者一出一些步驟的,比如根據特定需要調整拼接流程。拼接流程中的所有構建塊兒在具體的命名空間中都是可達的【利用空間名::的方式可以調用的】,【這樣就可以根據需求】分部的組合或者使用他們。拼接流程的實現同這個人提到的十分相似。[BL07]
| M. Brown and D. Lowe. Automatic Panoramic Image Stitching using Invariant Features. International Journal of Computer Vision, 74(1), pages 59-73, 2007. |
BL07 指的是布朗先生和 大衛洛爾先生使用穩定特征自動全景圖像拼接。計算機視覺國際期刊,74(1),頁面 59-73,2007.
然后這多日來的成果:
可以優化的點:
1、每張圖片輸入后的判空操作,即用戶輸入的是否是一個靠譜的圖片 容易
2、合理的預覽功能,畢竟在一開始將所有的圖片彈出不友好,在此基礎上可以根據小圖標的預覽來,增加或者減少圖片。 需要時間
3、拼接過程中,需要給出一個友好提示,讓用戶進行等待。而不是點擊同沒點擊一樣。容易
4、軟件介紹按鈕 容易
5、本拼圖是基本版,與高級版存在平滑等很多內容的偏差 需要時間
6、發行版本有過多的dll文件,可以合並成一個exe文件,程序會更加簡潔。避免因為誤刪某一個dll而導致程序不可使用。 需要時間
7、文件保存時可以加上一個時間戳。防止由於保存時不小心點擊了確定,覆蓋了之前拼接好的圖像。 容易
8、預覽圖片時,圖片尺度大小是否可以調節,無法完整觀看圖片情況。 需要時間
致命的點:
9、輸入圖片必須是,具有相關性的圖片,否則會終止。 需要時間
10、輸入的圖片不能有噪聲圖片。否則也會終止。 9和10是同一個問題。
此時需要重新啟動程序運行。
