2 標定
3 矯正
\\ 將n維向量轉化為n+
1維向量,最後一維新增1
void cv::
convertpointstohomogeneous
( cv::inputarray src,
cv::outputarray dst
)
// 將n維向量轉化維n-1維向量,除以最後1維
void cv::
convertpointsfromhomogeneous
( cv::inputarray src,
cv::outputarray dst
)
// 用於實現旋轉矩陣和旋轉向量之間的轉換
void cv::
rodrigues
( cv::inputarray src,
cv::outputarray dst,
cv::outputarray jacobian = cv::
noarray()
)
/*
image: 必須是8位元影象;
patternsize: 表示棋盤的每行每列有多少角點(內角點數);
corners: 用畫素座標來表示角點位置的輸出矩陣
*/bool cv::
findchessboardcorners
( cv::inputarray image,
cv::size patternsize,
cv::outputarray corners,
int flags = cv::calib_cb_adaptive_thresh | cv::calib_cb_normalize_image
);
標誌
意義cv::calib_cb_adaptive_thresh
自適應閾值化
cv::calib_cb_normalize_image
閾值化之前的歸一化操作
cv::calib_cb_filter_quads
從黑色方塊找角點
cv::calib_cb_fast_check
快速掃瞄確定影象中存在角點
/*
image: 必須是8位彩色影象
patternwasfound: 表示是否整個棋盤圖案上的角點都被成功找到
*/void cv::
drawchessboardcorners
( cv::inputoutputarray image,
cv::size patternsize,
cv::inputarray corners,
bool patternwasfound
);
/*
image: 必須是8位元影象;
flags: 告訴函式如何排列圓圈,有對稱和非對稱排列兩種。當為非對稱排列時,行列數計算方式不同
*/bool cv::
findcirclesgrid
( cv::inputarray image,
cv::size patternsize,
cv::outputarray centers,
int flags = cv::calib_cb_symmetric_grid,
const cv::ptr
& blobdetector =
new******blobdetector()
);
/*
srcpoints和dstpoints必須是nx2的cv_32fc1、nx1的cv_32fc2的矩陣或cv::point2f的stl vector物件;
method: cv::default, cv::ransac, cv::lmeds
*/cv::mat cv::
findhomography
( cv::inputarray srcpoints,
cv::inputarray dstpoints,
int method =0,
double ransacreprojectthreshold =3,
cv::outputarray mask = cv::noarray
)
double cv::
calibratecamera
( cv::inputarrayofarrays objectpoints,
cv::inputarrayofarrays imagepoints,
cv::inputoutputarray cameramatrix,
cv::inputoutputarray distcoeffs,
cv::outputarrayofarrays rvecs,
cv::outputarrayofarrays tvecs,
int flags =0,
cv::termcriteria criteria = cv::
termcriteria
( cv::termcriteria::count | cv::termcriteria::eps,30,
dbl_epsilon ))
;
void cv::
initundistortrectifymap
( cv::inputarray cameramatrix,
cv::inputarray distcoeffs,
cv::inputarray r,
cv::inputarray newcameramatrix,
cv::size size,
int m1type,
cv::outputarray map1,
cv::outputarray map2
)
cv::
remap
()
void cv::
undistort
( cv::inputarray src,
cv::outputarray dst,
cv::inputarray cameramatrix,
cv::inputarray distcoeffs,
cv::inputarray newcameramatrix = cv::
noaarray()
)
void cv::
undistortpoints
( cv::inputarray src,
cv::outputarray dst,
cv::inputarray cameramatrix,
cv::inputarray distcoeffs,
cv::inputarray r = cv::
noaarray()
cv::inputarray p = cv::
noaarray()
)
void cv::
convertmaps
( cv::inputarray map1,
cv::inputarray map2,
cv::outputarray dstmap1,
cv::outputarray dstmap2,
int dstmap1type,
bool nninterpolation =
false
)
OpenCV相機標定
include include include include 標頭檔案 include using namespace cv 包含cv命名空間 using namespace std 棋盤標靶中每塊的寬和高 int g height 100 int g width 100 int g innerh...
相機標定 OpenCV
使用opencv標定的好處 會自動生成乙個.xml檔案,方便使用。即換不同相機時候只用換這個檔案,而不需要改變 作業系統 ubuntu16.04 opencv版本 3.4.6 攝像頭 電腦自帶攝像頭 標定步驟 1 找到標定例程 進入opencv安裝目錄,找到samples cpp tutorial ...
OpenCV 相機標定(演算法)
include include include include include include include include include using namespace cv using namespace std int main 提取角點 if 0 findchessboardcorner...