チェッカーボードのエトセトラ
int cvFindChessboardCorners(IplImage *image, CvSize pattern_size, CvPoint2D32f* corners, int* count, int flags);†
渡した画像内からチェッカーボードパターンを見つけて座標を取得する
- image:IplImage*型の画像
- pattern_size:CvSize型のパターンの個数
- corners:CvPoint2D32f*型のパターンの座標
- count:int*型の検出された座標の個数.省略可能
- flags:int型のフラグ.省略可能
返り値†
- 座標の抽出に成功した場合は1を返す
- 座標の抽出に失敗した場合は0を返す
void cvDrawChessboardCorners(IplImage* image, CvSize pattern_size, CvPoint2D32f* corners, int count, int found );†
求まった座標群を画像に描画する
- image:IplImage*型の画像
- pattern_size:CvSize型のパターンの個数
- corners:CvPoint2D32f*型のパターンの座標
- count:int型のコーナー数
- found:int型のフラグ
返り値†
- 基本的にDrawChessboardCornersはFindChessboardCornersと対で使うことを想定されている
- 画像からパターンを抽出して座標を得る.
- パターンは
みたいな市松模様を利用する
- imageは画像
- pattern_sizeはCvSizeで渡す
- マスの数でなく,間の数を指定する
- ex: cvSize(3,2)

- cornersには座標の値が返って来る/を入れる
- countに検出された数が入る/を入れる
- foundに1を入れると完全に見つかった場合,0の場合は見つかった座標だけ描画
- flagsに処理を入れる
- CV_CALIB_CB_ADAPTIVE_THRESH(1):画像を2値化するときに画像全体の明度値からしきい値を決定する.省略された場合のデフォルト値
- CV_CALIB_CB_NORMALIZE_IMAGE(2):2値化する前にヒストグラム平坦化を行う
- CV_CALIB_CB_FILTER_QUADS(4):四角形を抽出する際に追加基準を利用する
サンプルコード†
#geshi(c++,number){{
const int patternX = 2; // X軸方向の点の数
const int patternY = 3; // Y軸方向の点の数
CvCapture *camera = cvCaptureFromCAM(-1); // カメラの初期化
IplImage *image = cvQueryFrame(camera); // 画像を取得
CvSize size = cvSize(patternX, patternY); // パターンのサイズ
CvPoint2D32f *corners = new CvPoint2D32f [patternX*patternY];
// 点格納用配列
int result, count; // 個数カウント用変数
result = cvFindChessboardCorners(image, size, corners, &count);
// 点を検出する
cvDrawChessboardCorners(image, size, corners, count, result);
// 検出した点を描画する
cvReleaseCapture(&camera);
delete [] corners;
}}
実体ファイル†
- cv/include/cvcalibinit.cpp
- cv/src/cv.h
ジャンル:OpenCV:OpenCV 1.0準拠