資源簡介
基于opencv平臺編寫的單目相機標定程序,使用的張正友的方法,只要準備十二張單目相機拍攝的棋盤格的圖片就可以標定出單目相機的焦距等參數,建立單目相機坐標系。可以用于機器視覺測量中,也可以用于雙面相機標定的前一步,精度很高。
代碼片段和文件信息
//calib.cpp
//Calling?convention:
//calib?board_w?board_h?number_of_views
//
//Hit?‘p‘?to?pause/unpause?ESC?to?quit
#include?
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
int?n_boards?=?16;//Will?be?set?by?input?list
const?int?board_dt?=?30;//wait?30?frames?per?chessboard?view
int?board_w;
int?board_h;
CvSize?imageSize?=?{00};
int?main?()
{
board_w?=?6;
board_h?=?8;
n_boards?=?16;
int?board_n?=?board_w?*?board_h;
CvSize?board_sz?=?cvSize(?board_wboard_h?);
IplImage?*image*gray_image;
char*?imageList?=?“list.txt“;
FILE*?f?=?fopen(imageList?“rt“);
//CvCapture*?capture?=?cvCreateCameraCapture(0);
//assert(?capture?);
cvNamedWindow(“Calibration“);
//ALLOCATE?STORAGE
CvMat*?image_points?=?cvCreateMat(n_boards*board_n2CV_32FC1);
CvMat*?object_points?=?cvCreateMat(n_boards*board_n3CV_32FC1);
CvMat*?point_counts?=?cvCreateMat(n_boards1CV_32SC1);
CvMat*?intrinsic_matrix?=?cvCreateMat(33CV_32FC1);
CvMat*?distortion_coeffs?=?cvCreateMat(51CV_32FC1);
CvPoint2D32f*?corners?=?new?CvPoint2D32f[?board_n?];
int?corner_count;
int?successes?=?0;
int?step?frame?=?0;
//CAPTURE?CORNER?VIEWS?LOOP?UNTIL?WE‘VE?GOT?n_boards
//SUCCESSFUL?CAPTURES(ALL?CORNERS?ON?THE?BOARD?ARE?FOUND)
//
while?(successes? //Skip?every?board_dt?frames?to?allow?user?to?move?chessboard
if(frame++?%?board_dt?==?0){
//Find?chessboard?corners:
char?filename[100];
??????if(?!fgets(?filename?sizeof(filename)-3?f?))
?????????break;
??????size_t?len?=?strlen(filename);
??????while(?len?>?0?&&?isspace(filename[len-1]))
?????????filename[--len]?=?‘\0‘;
??????if(?filename[0]?==?‘#‘)
?????????continue;?
??????IplImage*?image?=?cvLoadImage(?filename?0);
??????if(?!image?)
?????????break;
??imageSize?=?cvGetSize(image);
int?found?=?cvFindChessboardCorners(
image?board_sz&corners[0]?&corner_count
CV_CALIB_CB_ADAPTIVE_THRESH?|?CV_CALIB_CB_FILTER_QUADS);
//Get?Subpixel?accuracy?on??those?corners
if(?found?)
??????{
cvFindCornerSubPix(image&corners[0]corner_count
cvSize(55)cvSize(-1-1)cvTermCriteria(
CV_TERMCRIT_EPS+CV_TERMCRIT_ITER3000.001));
//Draw?it?
cvDrawChessboardCorners(imageboard_sz&corners[0]corner_countfound);
cvShowImage(“Calibration“image);
?}
//If?we?got?a?good?board?add?it?to?our?data
if(?corner_count?==?board_n?){
step?=?successes*board_n;
for(?int?i?=?stepj=?0;j CV_MAT_ELEM(*image_pointsfloati0)?=?corners[j].x;
CV_MAT_ELEM(*image_pointsfloati1)?=?corners[j].y;
CV_MAT_ELEM(*object_pointsfloati0)?=?j/board_w;
CV_MAT_ELEM(*object_pointsfloati1)?=?j%board_w;
CV_MAT_ELEM(*object_pointsfloati2)?=?0.0f;
}
CV_MAT_ELEM(*point_counts?int?successes0)?=?board_n;
successes++;
}
}//end?skip?board_dt?between?chessboard?capture
//Handle?pause/u
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????27136??2020-01-30?13:38??danmu\.vs\danmu\v15\.suo
?????文件????3284992??2020-01-30?13:38??danmu\.vs\danmu\v15\Browse.VC.db
?????文件???21561344??2020-01-30?13:36??danmu\.vs\danmu\v15\ipch\AutoPCH\DANMU-d6674eff\DANMU-3784a836\DANMU.ipch
?????文件???????6137??2016-08-15?15:14??danmu\danmu\danmu.cpp
?????文件???????4766??2020-01-30?13:35??danmu\danmu\danmu.vcxproj
?????文件????????943??2016-03-01?17:41??danmu\danmu\danmu.vcxproj.filters
?????文件????????221??2020-01-30?13:35??danmu\danmu\danmu.vcxproj.user
?????文件????????654??2016-08-15?15:14??danmu\danmu\Debug\cl.command.1.tlog
?????文件??????20236??2016-08-15?15:14??danmu\danmu\Debug\CL.read.1.tlog
?????文件????????340??2016-08-15?15:14??danmu\danmu\Debug\CL.write.1.tlog
?????文件???????2424??2016-08-15?15:14??danmu\danmu\Debug\danmu.Build.CppClean.log
?????文件????????406??2016-08-15?15:14??danmu\danmu\Debug\danmu.exe.em
?????文件????????472??2016-08-15?15:14??danmu\danmu\Debug\danmu.exe.em
?????文件????????381??2016-08-15?15:14??danmu\danmu\Debug\danmu.exe.intermediate.manifest
?????文件?????????76??2016-08-19?09:03??danmu\danmu\Debug\danmu.lastbuildstate
?????文件????????885??2016-08-19?09:03??danmu\danmu\Debug\danmu.log
?????文件?????114216??2016-08-15?15:14??danmu\danmu\Debug\danmu.obj
?????文件????????707??2016-08-19?09:03??danmu\danmu\Debug\danmu.vcxprojResolveAssemblyReference.cache
?????文件??????????0??2016-08-15?15:14??danmu\danmu\Debug\danmu.write.1.tlog
?????文件????????200??2016-08-15?15:14??danmu\danmu\Debug\danmu_manifest.rc
?????文件??????????2??2016-08-15?15:14??danmu\danmu\Debug\li
?????文件??????????2??2016-08-15?15:14??danmu\danmu\Debug\li
?????文件??????????2??2016-04-07?11:14??danmu\danmu\Debug\li
?????文件??????????2??2016-04-07?11:14??danmu\danmu\Debug\li
?????文件??????????2??2016-04-07?11:14??danmu\danmu\Debug\li
?????文件??????????2??2016-04-07?11:14??danmu\danmu\Debug\li
?????文件??????????2??2016-08-15?15:14??danmu\danmu\Debug\li
?????文件??????????2??2016-08-15?15:14??danmu\danmu\Debug\li
?????文件??????????2??2016-08-15?15:14??danmu\danmu\Debug\li
?????文件??????????2??2016-08-15?15:14??danmu\danmu\Debug\li
............此處省略54個文件信息
- 上一篇:Minecraft多功能壓測-假人-motd-srv轉發
- 下一篇:LOL防封
評論
共有 條評論