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”;
評論
查看更多