



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include cvut.h#include #include #include using namespace cvut;using namespace std;#pragma comment(lib,cxcore.lib)#pragma comment(lib,cv.lib)#pragma comment(lib,highgui.lib)void main() ifstream fin(calibdata.txt); /*定標(biāo)所用圖像文件的路徑*/ofstream fout(caliberation_result.txt); /* 保存定標(biāo)結(jié)果的文件 */讀取每一幅圖像,從中提取出角點(diǎn),
2、然后對(duì)角點(diǎn)進(jìn)行亞像素精確化cout開始提取角點(diǎn);int image_count=0; /* 圖像數(shù)量 */CvSize image_size; /* 圖像的尺寸 */CvSize board_size = cvSize(5,7); /* 定標(biāo)板上每行、列的角點(diǎn)數(shù) */CvPoint2D32f*image_points_buf=newCvPoint2D32fboard_size.width*board_size.height; /* 緩存每幅圖像上檢測(cè)到的角點(diǎn) */Seq image_points_seq; /* 保存檢測(cè)到的所有角點(diǎn) */ string filename; while (get
3、line(fin,filename) image_count+; int count;Image view(filename); if (image_count = 1) image_size.width = view.size().width; image_size.height = view.size().height;/*提取角點(diǎn)*/if (0 = cvFindChessboardCorners( view.cvimage, board_size, image_points_buf, &count, CV_CALIB_CB_ADAPTIVE_THRESH ) coutcan not fi
4、nd chessboard corners!n;exit(1); else Image view_gray(view.size(),8,1); rgb2gray(view,view_gray);/*亞像素精確化*/ cvFindCornerSubPix( view_gray.cvimage, image_points_buf, count, cvSize(11,11), cvSize(-1,-1), cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 ); image_points_seq.push_back(image_poin
5、ts_buf,count);/*在圖像上顯示角點(diǎn)位置*/ cvDrawChessboardCorners( view.cvimage, board_size, image_points_buf, count, 1);view.show(calib); cvWaitKey(); view.close(); delete image_points_buf; cout角點(diǎn)提取完成! n;攝像機(jī)定標(biāo)cout開始定標(biāo);CvSize square_size = cvSize(10,10); /*實(shí)際測(cè)量得到的定標(biāo)板上每個(gè)棋盤格的大小*/Matrix object_points(1,board_size.w
6、idth*board_size.height*image_count,3); /*保存定標(biāo)板上角點(diǎn)的三維坐標(biāo)*/Matrix image_points(1,image_points_seq.cvseq-total,2); /*保存提取的所有 角點(diǎn) */Matrix point_counts(1,image_count,1); /* 每幅圖像中角點(diǎn)的數(shù)量 */Matrix intrinsic_matrix(3,3,1); /* 攝像機(jī)內(nèi)參數(shù)矩陣 */Matrix distortion_coeffs(1,4,1); /* 攝像機(jī)的 4 個(gè)畸變系數(shù):k1,k2,p1,p2 */Matrix rota
7、tion_vectors(1,image_count,3); /* 每幅圖像的旋轉(zhuǎn)向量 */Matrix translation_vectors(1,image_count,3); /* 每幅圖像的平移向量 */*初始化定標(biāo)板上角點(diǎn)的三維坐標(biāo)*/int i,j,t;for (t=0;timage_count;t+) for (i=0;iboard_size.height;i+) for (j=0;jboard_size.width;j+) /*假設(shè)定標(biāo)板放在世界坐標(biāo)系中z=0的平面上*/object_points(0,t*board_size.height*board_size.width+i
8、*board_size.width+j,0) i*square_size.width;object_points(0,t*board_size.height*board_size.width+i*board_size.width+j,1) j*square_size.height;object_points(0,t*board_size.height*board_size.width+i*board_size.width+j,2) 0;/*將角點(diǎn)的存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)換成矩陣形式*/for (i=0;itotal;i+) image_points(0,i,0) = image_points_seqi.x
9、;image_points(0,i,1) = image_points_seqi.y;/*初始化每幅圖像中的角點(diǎn)數(shù)量,這里我們假設(shè)每幅圖像中都可以看到完整的定標(biāo)板*/for (i=0;iimage_count;i+)point_counts(0,i) = board_size.width*board_size.height;/*開始定標(biāo)*/cvCalibrateCamera2(object_points.cvmat,image_points.cvmat,point_counts.cvmat,image_size,intrinsic_matrix.cvmat,distortion_coeffs.
10、cvmat,rotation_vectors.cvmat,translation_vectors.cvmat,0);cout定標(biāo)完成! n;對(duì)定標(biāo)結(jié)果進(jìn)行評(píng)價(jià)cout開始評(píng)價(jià)定標(biāo)結(jié)果n;double total_err = 0.0; /*所有圖像的平均誤差的總和*/double err = 0.0; /*每幅圖像的平均誤差*/Matrix image_points2(1,point_counts(0,0,0),2); /* 保存重新計(jì)算得到的投影點(diǎn) */coutt每幅圖像的定標(biāo)誤差:n;fout每幅圖像的定標(biāo)誤差:n;for (i=0;iimage_count;i+) /*通過得到的攝像機(jī)內(nèi)外
11、參數(shù),對(duì)空間的三維點(diǎn)進(jìn)行重新投影計(jì)算,得到新的投影點(diǎn)*/cvProjectPoints2(object_points.get_cols(i*point_counts(0,0,0),(i+1)*point_counts(0,0,0)-1).cvmat,rotation_vectors.get_col(i).cvmat,translation_vectors.get_col(i).cvmat, intrinsic_matrix.cvmat, distortion_coeffs.cvmat, image_points2.cvmat, 0,0,0,0);/*計(jì)算新的投影點(diǎn)和舊的投影點(diǎn)之間的誤差*/er
12、rcvNorm(image_points.get_cols(i*point_counts(0,0,0),(i+1)*point_counts(0,0,0)-1).cvm at,image_points2.cvmat, CV_L1);total_err += err/=point_counts(0,0,0);couttt 第i+1幅圖像的平均誤差:err像素n;foutt 第i+1幅圖像的平均誤差:err像素n;coutt 總體平均誤差:total_err/image_count像素n;fout總體平均誤差:total_err/image_count像素nn;cout評(píng)價(jià)完成! n;保存定標(biāo)結(jié)果
13、cout開始保存定標(biāo)結(jié)果;Matrix rotation_vector(3,1); /* 保存每幅圖像的旋轉(zhuǎn)向量 */Matrix rotation_matrix(3,3); /* 保存每幅圖像的旋轉(zhuǎn)矩陣 */fout相機(jī)內(nèi)參數(shù)矩陣:n;foutintrinsic_matrixn;fout畸變系數(shù):n;foutdistortion_coeffsn;for (i=0;iimage_count;i+) fout”第i+1幅圖像的旋轉(zhuǎn)向量:n;foutrotation_vectors.get_col(i);/*對(duì)旋轉(zhuǎn)向量進(jìn)行存儲(chǔ)格式轉(zhuǎn)換*/for (j=0;j3;j+) rotation_vector(j,0,0) = rota
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 西昌農(nóng)業(yè)灌溉管理辦法
- 西藏銜接資金管理辦法
- 設(shè)備采購招標(biāo)管理辦法
- 證券量化授權(quán)管理辦法
- 訴訟律師業(yè)務(wù)管理辦法
- 財(cái)務(wù)審批時(shí)效管理辦法
- 財(cái)政對(duì)外借款管理辦法
- 財(cái)政數(shù)據(jù)保密管理辦法
- 財(cái)政票據(jù)管理辦法宣傳
- 財(cái)政評(píng)審概算管理辦法
- 互聯(lián)網(wǎng)行業(yè)產(chǎn)品經(jīng)理專業(yè)顧問聘用協(xié)議
- 2025年 東北石油大學(xué)招聘考試筆試試題附答案
- 2025年安徽省中考地理真題試卷(含答案)
- 人教版2025年八年級(jí)英語下學(xué)期期末總復(fù)習(xí)(專題訓(xùn)練)專題01單項(xiàng)選擇【期末易錯(cuò)100題】(人教版)(學(xué)生版+解析)
- 企業(yè)財(cái)務(wù)內(nèi)控管理制度
- 2025以色列與伊朗沖突全面解析課件
- 警察抓捕教學(xué)課件
- 2025年農(nóng)產(chǎn)品質(zhì)量安全追溯體系在食品安全監(jiān)管中的應(yīng)用與改進(jìn)報(bào)告
- 做賬實(shí)操-漁業(yè)行業(yè)的賬務(wù)處理分錄實(shí)例
- 2025-2030年中國手持三維激光掃描儀行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)與投資前景研究報(bào)告
- 2025-2030年中國單壁碳納米管(SWNT)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
評(píng)論
0/150
提交評(píng)論