OpenCV sample目錄下自帶兩個與相機標定的cpp文件即:calibration.cpp和calibration_artificial.cpp
calibration.cpp 是通過用戶輸入可選參數進行攝像機標定的程序。
calibration_artificial.cpp 是程序模擬模擬攝像機標定的過程,即程序創建棋盤然后自主標定。
通常我們有兩種方式去標定,一個是實時的從攝像機獲取拍攝到的棋盤進行標定,一個是已經獲得了一些棋盤的圖片來標定。
本文詳細介紹第二種,即用已獲得的棋盤圖片的整個過程。
方法一:編譯生成 .exe文件,然后在commond 窗口輸入參數執行
方法二:通過添加輸入參數的代碼,然后執行(可以單步調試)(推薦此方法)
calibration.cpp 和 calibration_artificial.cpp 位置如圖所示。此外,棋盤圖片也在同一目錄下
找到文件后,開始新建工程吧。不過在用以獲得的圖像來進行標定,應先通過OpenCV自帶的imagelist_creator.cpp 產生一個xml或者yaml格式的圖像列表,然后在使用下面的程序。
第一步,新建項目demo,添加剛才那個目錄下的imagelist_creator.cpp 編譯執行得到可執行文件 demo.exe
第二步,執行demo.exe 產生一個xml或者yaml格式的圖像列表
static void help(char** av)
{
cout 《《 “\nThis creates a yaml or xml list of files from the command line args\n”
“usage:\n./” 《《 av[0] 《《 “ imagelist.yaml *.png\n”
《《 “Try using different extensions.(e.g. yaml yml xml xml.gz etc.。。)\n”
《《 “This will serialize this list of images or whatever with opencv‘s FileStorage framework” 《《 endl;
}
輸入命令:demo imagelist.yaml left01.jpg left02.jpg left03.jpg left04.jpg left05.jpg left06.jpg left07.jpg left08.jpg left09.jpg left010.jpg left11.jpg left12.jpg left13.jpg left14.jpg right01.jpg right02.jpg right03.jpg right04.jpg right05.jpg right06.jpg right07.jpg right08.jpg right09.jpg right10.jpg right11.jpg right12.jpg right13.jpg right14.jpg ?;剀?,生成imagelist.yaml
第三步,進行相機的標定
先把14張棋盤圖片放到debug目錄下,然后移除imagelist_creator.cpp 添加 calibration.cpp ,如圖所示
編譯執行,得到新的demo.exe ,進入cmd ,輸入 demo -w 6 -h 9 imagelist.yaml 回車即可。如圖所示,開始對每張圖片進行角點檢測
最后,得到一個 out_camera_data.yml 文件
內容如下:
%YAML:1.0
calibration_time: “08/21/15 16:54:26”
image_width: 640
image_height: 480
board_width: 6
board_height: 9
square_size: 1.
flags: 0
camera_matrix: ??!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 5.3765976500165073e+002, 0., 3.4011155767874686e+002, 0.,
5.3789341813113867e+002, 2.3694081464807104e+002, 0., 0., 1. ]
distortion_coefficients: ??!opencv-matrix
rows: 5
cols: 1
dt: d
data: [ -2.7762353155161251e-001, 5.3976467600878486e-002,
2.1257384355991209e-003, -3.9487502777272009e-004,
4.8679847473271927e-002 ]
avg_reprojection_error: 4.4034956116049290e-001
此時,大功告成 =。=
//對于想自己單步調試的親,補充第二種方法,即通過添加代碼調試。
第一步:將圖片及imagelist放到 D:\Workspace\demo\demo目錄下
第二步: 添加代碼
具體過程如圖所示:
在該目錄下放入imagelist.yaml 和14張圖片
添加代碼
argc = 6;
argv[0] = “demo.exe”;
argv[1] = “-w”;
argv[2] = “6”;
argv[3] = “-h”;
argv[4] = “9”;
argv[5] = “imagelist.yaml”;
評論