cvFindChessboardCorners()の引数に気をつけろ

OpenCVで気になったところがあるのでちょこっとメモ。OpenCVユーザーなら当たり前なのかもしれませんが一応。
cvFindChessboardCorners()って安定しているのでマーカー検出のサンプルには持ってこいです。しかし、検出するコーナー数を減らすと思わぬアプリケーションエラーに出くわします。手順は以下のとおり。
まずインスタンスを作成します。

CvPoint2D32f* corners = (CvPoint2D32f*)cvAlloc(sizeof(CvPoint2D32f) * m_corner);
// この「コーナー数」がくせものです↑
IplImage* inputImage = cvCreateImage(cvSize(m_width,m_height), IPL_DEPTH_8U, 3);
IplImage* grayImage = cvCreateImage(cvGetSize(inputImage), inputImage->depth, 1);

んで処理は

int corner_cnt = 0;
int corner_flag = CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE | CV_CALIB_CB_FILTER_QUADS;
int ret = cvFindChessboardCorners(inputImage, cvSize(2, (m_corner / 2)), corners, &corner_cnt, corner_flag);
if(ret != 0){
CvTermCriteria criteria = { CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.0001 };
cvFindCornerSubPix(grayImage, corners, corner_cnt, cvSize(5,5), cvSize(-1, -1), criteria);
}

コーナー数に2x2以下を指定してCvPoint2D32fをアロケートしてcvFindChessboardCorners()を呼ぶと落ちます。

~\OpenCV\cv\src\cvcalibinit.cpp(151)
pattern should have at least 2x2 size

とか表示されています。言われたソースコードを見てみると..

if( pattern_size.width <= 2 || pattern_size.height <= 2 )
CV_ERROR( CV_StsOutOfRange, "pattern should have at least 2x2 size" );

要するに3x3以上のサイズを指定しないとこのエラーを吐くことになります。このことはマニュアルにも書いていないので気をつける必要がありそうです。