發現OpenCV 2.4 beta有好多個校正鏡頭的sample code,這次玩了人工校正鏡頭 (Camera Calibration Artificial),它會產生一個人造的鏡頭和人造的棋盤影像們,然後進行校正!
- 範例程式:C:\OpenCV2.4beta\samples\cpp\calibration_artificial.cpp
- 環境設定:Visual Studio 2010 安裝 OpenCV 2.4 beta
基本上程式會陸續做:
- 產生雜訊背景(所有影像同一背景)
- 產生棋盤影像(顯示棋盤角)
- 找尋棋盤角(顯示找到的棋盤角)
- 校正鏡頭
- 計算平均重新映射錯誤
- 顯示最初鏡頭矩陣和最初距離係數
- 顯示估測的鏡頭矩陣和估測的距離係數
程式執行後顯示訊息:
- calibration_artificial.exe
This code generates an artificial camera and artificial chessboard images,
and then calibrates. It is basically test code for calibration that shows
how to package calibration points and then calibrate the camera.
Usage:
./calibration_artificialInitializing background…Done
Initializing chess board generator…Done
Generating chessboards…0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 DoneFinding chessboards’ corners…0-found 1-found 2-found 3-found 4-found 5-not-fou
nd 6-found 7-found 8-not-found 9-found 10-found 11-found 12-found 13-found 14-fo
und 15-found 16-found 17-found 18-found 19-found Done
Calibrating…DoneAverage Reprojection error: 0.000477807
==================================
Original camera matrix:
300 0 400 0 300 300 0 0 1
Original distCoeffs:
1.2 0.2 0 0 0
==================================
Estimated camera matrix:
297.065 0 400.099 0 302.268 299.621 0 0 1
Estimated distCoeffs:
1.16946 0.296977 -2.26211e-005 0.00456737 -0.115646
不知道能拿最後的結果來做什麼……
還是來看影像比較有感覺吧~(點圖可放大)
這個程式基本上可改三個參數,預設值如下:
- const Size imgSize(800, 600);
- const Size brdSize(8, 7);
- const size_t brds_num = 20;
我改了第二個參數為:
- const Size brdSize(17, 12);
影像結果如下:(點圖可放大)
經實驗證明,棋盤大小會影響辨識效果。以brdSize(17, 12)為例,彩色標定表示成功有10張,紅色標定表示失敗有9張,沒有反應代表完全失敗有1張,再回頭看brdSize(8, 7)的結果比較得知。
程式執行顯示結果:(未列出代表與上者同)
Initializing background…Done
Initializing chess board generator…Done
Generating chessboards…0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 DoneFinding chessboards’ corners…0-found 1-not-found 2-not-found 3-not-found
4-found 5-not-found 6-found 7-found 8-not-found 9-found 10-found 11-found
12-found 13-not-found 14-not-found 15-not-found 16-found 17-found 18-not-found
19-not-found
Done
Calibrating…DoneAverage Reprojection error: 0.000119308
==================================
Original camera matrix:
300 0 400 0 300 300 0 0 1
Original distCoeffs:
1.2 0.2 0 0 0
==================================
Estimated camera matrix:
294.073 0 398.498 0 301.739 300.347 0 0 1
Estimated distCoeffs:
1.16677 0.22774 0.00434019 -0.00411816 0.012649
覺得應該要有可以設定鏡頭涵蓋角度比較有用!像是可設定為90度、120度、160度等做鏡頭校正,如此才較直覺且有意義!
![[OpenCV] 人工校正鏡頭 (Camera Calibration Artificial)](https://cg2010studio.com/wp-content/uploads/2012/05/opencv-e4babae5b7a5e6a0a1e6ada3e98fa1e9a0ad-camera-calibration-artificial.jpg?w=540&h=405)
![[OpenCV] 人工校正鏡頭 (Camera Calibration Artificial)](https://cg2010studio.com/wp-content/uploads/2012/05/opencv-e4babae5b7a5e6a0a1e6ada3e98fa1e9a0ad-camera-calibration-artificial.png?w=540&h=351)
![[OpenCV] 人工校正鏡頭 (Camera Calibration Artificial)](https://cg2010studio.com/wp-content/uploads/2012/05/opencv-e4babae5b7a5e6a0a1e6ada3e98fa1e9a0ad-camera-calibration-artificial1.png?w=540&h=352)
隨意留個言吧:)~