OpenCV學習筆記(25)基於MFC和OpenCV的攝像機定標與立體匹配測試程序(20140505更新)

最近整理了一下這兩年一直在用的攝像機定標與立體匹配測試程序,將代碼進行了重構,界面也做了調整,分享出來方便有需要的朋友使用。當然我的編程能力有限,程序可能還有各種bug,請大家多多包涵。相關問題歡迎留言或email聯繫討論,謝謝!

 

==================================================================================

源碼下載

Github: https://github.com/yuhuazou/StereoVision 2014-05-05 更新,新增StereoVar算法

微盤: http://vdisk.weibo.com/s/sEby0 (已修正只能打開一個攝像頭的bug)

CSDN資源:http://download.csdn.net/detail/chenyusiyuan/4702621 (有bug,只能打開一個攝像頭)

==================================================================================

bug#01:

在 StereoVisionDlg.cpp 文件的 OnBnClkRunCam() 函數裏,
...
if (m_nCamCount == 1)
{
//打開第一個攝像頭
...
上面的m_nCamCount == 1 就是 bug,需要改爲m_nCamCount >= 1
這樣應該就能同時打開兩個攝像頭了。

==========================================================

 

一、原始編譯環境

Ÿ  Windows 7 64位旗艦版

Ÿ  OpenCV SVNv2.4.9

Ÿ  x64應用


二、編譯修改說明(下載後必須按以下步驟根據你的本機環境調整設置,才能正常編譯使用)

1.      雙擊 .sln文件打開解決方案

2.      在項目屬性的VC++目錄”中分別修改OpenCV相關的 include路徑和 lib路徑;directshow的路徑使用了相對路徑,不需要修改

3.      在“解決方案平臺”中選擇“win32”或“x64”,分別對應32位系統和64位系統



三、使用說明

1.      界面


紅色:攝像頭初始化區域;          綠色:圖像基本處理區域;

藍色:攝像頭定標區域;              橙色:雙目匹配計算區域;

 

2.       操作步驟

(1)     攝像頭初始化

1)         選擇擬打開的攝像頭:

   當電腦接入多個攝像頭時:A.從“選擇左/右攝像頭”下拉菜單中選擇該視角應該對應的攝像頭設備名稱(序號);B. 注意不同視角的攝像頭設備序號不能相同,若相同會彈出警告窗口。

   當電腦只有一個攝像頭接入時:直接從“選擇左攝像頭”下拉菜單中選擇攝像頭設備名稱(序號)。

2)         選擇攝像頭的分辨率:

   從“選擇分辨率”下拉菜單中選擇,目前有三種分辨率:640*480352*288320*240.

3)         啓動攝像頭:

   點擊“啓動攝像頭”按鈕,界面上各功能按鈕生效,即可進行攝像頭定標、雙目匹配等操作。

   點擊“關閉攝像頭”按鈕,可以重新調整攝像頭的配置。

(2)     攝像機定標

1)         點擊“默認設置”,加載默認參數和選項;

2)         按照實際需要調整相關參數和選項;

A.        棋盤角點數:nxny分別是棋盤上橫向和縱向的角點個數,注意必須按照實際棋盤橫向和縱向的最大角點數輸入,否則會造成角點檢測失敗;

B.        棋盤方塊大小:棋盤方塊的實際大小,毫米爲單位;

C.        棋盤檢測次數:以10-20次爲宜;

D.        雙目校正縮放係數:取值範圍爲01,或者 -1。具體含義參見:http://blog.csdn.net/chenyusiyuan/article/details/8131496

E.         棋盤圖像來源:默認爲“從攝像機”,也可選擇“從本地圖片”;若選擇“從本地圖片”讀入,在執行定標時,將彈出對話框分別選擇左視圖圖像和右視圖圖像;注意左、右視圖的圖像數均需要至少4張;當左、右視圖圖像數與棋盤檢測次數不一致時,取三者最小值爲準;

F.         雙目校正算法:默認爲“BOUGUET”,也可選擇“HARTLEY”;不過HARTLEY”方法的雙目校正尚未進行測試,可能存在bug

G.        標誌位選擇:各標誌位的設置請參見OpenCV相關文檔;

FPP:   CV_CALIB_FIX_PRINCIPAL_POINT

UIG: CV_CALIB_USE_INTRINSIC_GUESS

FAR: CV_CALIB_FIX_ASPECT_RATIO

ZTD: CV_CALIB_ZERO_TANGENT_DIST

SFL:   CV_CALIB_SAME_FOCAL_LENGTH

FI:     CV_CALIB_FIX_INTRINSIC

H.        讀入角點座標數據:如果曾進行過攝像機定標操作,程序文件夾內將保存有上一次操作的棋盤角點數據的文件(文件名爲CornerData.yml)。點擊該選項,將自動加載上一次操作的棋盤角點數據,跳過“棋盤角點檢測”這一步,直接進行攝像機定標。如果文件夾內沒有CornerData.yml文件或者文件讀取失敗,將彈出警告窗口,應檢查該文件是否存在、或者不選擇此項,重新進行棋盤角點檢測;

I.          讀入單目定標結果:將從本地文件(cameraParams_left.ymlcameraParams_right.yml)中加載攝像機參數,然後進行攝像機定標;如果加載失敗,將彈出警告窗口;

J.          首先執行單目定標:在獲取棋盤角點數據後,先調用cv::calibrate- Camera函數對左、右攝像機分別進行定標,獲取攝像機內部參數,並將參數保存到 cameraParams_left/right.yml文件中。然後再執行雙目定標(當電腦接入的攝像頭數大於1個時);

K.         直接執行雙目定標:在獲取棋盤角點數據後,直接調用stereoCalibrate函數進行雙目定標(當電腦接入的攝像頭數大於1個時);定標結果保存到calib_paras.xml文件中。

注意:HIJ項是三選一的選項。

L.         顯示攝像機定標效果:如果僅接入一個攝像頭,則顯示單目定標後消除畸變的效果;否則顯示雙目定標後左右視圖畸變消除和行對準的效果。

3)         點擊“執行攝像機定標”,開始定標操作,程序將依次執行以下工作:

A.        棋盤角點檢測

B.        單目定標

C.        雙目定標

D.        雙目校正

E.         顯示定標效果

4)         點擊“退出攝像機定標”,完成或中止定標操作,恢復攝像機正常顯示。該按鈕僅在“棋盤角點檢測”和“顯示定標效果”階段有效。

(3)     雙目匹配

1)         選擇“雙目匹配算法”:“BM”或“SGBM”,點擊後將清零相關的參數;

2)         點擊“默認配置”:載入所選算法的默認參數;

3)         視需要調整參數,可以在計算視差期間實時調整各項參數;

A.        “參數設置”中各項參數的意義和取值請參見OpenCV相關文檔;

B.        選擇圖像來源:“從攝像機”或“從本地圖片”;

C.        “雙目校正”:點選後,將需要手動選擇攝像機定標文件,然後程序將根據定標參數對圖像進行校正,再進行雙目匹配和視差計算。若不點選,則程序直接對原始的左右視圖進行視差計算,這種情況一般用於從本地讀取下載好的公共測試圖像,這些公共測試圖像一般都已經過標定和行對齊,可直接用於視差計算;

D.        “三維點雲”:點選後,將根據視差圖生成三維點雲,並檢測距離最近的物體;但若讀入的攝像機定標文件中記錄的校正方法不是 BOUGUET 方法,則無法生成點雲;

E.         “保存畫面”:點選後,將自動保存每幀左、右視圖和視差圖到本地;

F.         “延時處理”:點選後,將在計算完每幀視圖的視差圖和三維點雲後,延時一定時間,再進入下一幀的處理;延時時間默認爲 5 秒;可自行調整;

G.        “切換視圖”:在“視差圖”窗口中顯示 彩色視差、灰度視差、環境俯視、環境側視 圖像;

H.        “視場範圍”:設置視場的寬度、高度和深度範圍。

4)         點擊“計算視差”,將執行如下操作:

A.        若選擇“從本地圖片”載入左右視圖,則將彈出對話框分別選擇左右視圖圖像,可單選或多選;

B.        若點選了“雙目校正”,將彈出對話框,由用戶選擇雙目攝像機標定參數文件(文件名一般爲calib_paras.xml),程序將分析相關參數;

C.        程序進入循環,自動從本地或攝像機加載圖像,進行雙目匹配和視差計算等。

D.        如果點選了“生成點雲”,程序將根據視差圖生成三維點雲,並檢測出距離最近的物體,在界面中顯示物體的相關信息。

5)         點擊“停止計算”,退出雙目匹配和視差計算操作,恢復攝像機正常顯示。

(4)     幀處理測試

此處可進行各種簡單的圖像處理操作,目前有canny邊緣檢測、直方圖平衡、顏色空間轉換等。

四、其它

1、α=1的雙目校正

 

2、 α=0的雙目校正

3、α=-1的雙目校正

==================================================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章