2D Calibration

How it’s done: Finding Chessboard Corners.

はじめに

本稿では、チェスボードの「かど」を捜すプログラムを下記の手法で解説します。

  • プログラムについて、ひとこと…。
  • Source Code

それでは、参りましょう。

プログラムについて、ひとこと…。

基本的な方針としては、findChessboardCorners() Functionにループの中でチェスボードパターンの「かど」を捜してもらって、見つかったらループから抜けてもらって、画像に表示してもらいます。

プログラムの構成は3部。Parameterの宣言と画像の取得、ループ内で「かど」を探索、そしてループを出てから表示という形になります。

Source Code

Source Code は下にリストアップしておきます。参考のため… 。

void CMFC_OpenCV_StereoDoc::OnImageprocessChessboardcornerdetect()
{
// TODO: ここにコマンド ハンドラー コードを追加します。
bool found;
Size boardSize(6, 6);
vector<Point2f> corners;
 
// Input images from a camere
VideoCapture cap(0);
 
// The "for(;;)" loop searches for the chess board corners. Exit from the loop when these are found or press "Esc" key.
//
for (;;)
{
// Now "cap" is the image that shall be directed to "frame."
cap >> frame0;
namedWindow("frame", 1);           // Name the "frame" window
imshow("frame", frame0);            // Display the "frame" buffer.
 
cv::cvtColor(frame0, frame1, COLOR_BGR2GRAY);   // This line converts the color image "frame" to the grey scale image "frame1."
 
// The command below finds the chess board corners. The numbers of corners (width and height in size) must be specified. Please refer to "OpenCV Reference Manual" or "Tutorial."
found = findChessboardCorners(frame1, boardSize, corners/*, CALIB_CB_FAST_CHECK*/ /*CALIB_CB_NORMALIZE_IMAGE*/ /*, CALIB_CB_ADAPTIVE_THRESH*/);
 
/* Exit from loop if chessboard corners are found. */
if (found != 0) break;
 
/*  Press "Esc" key to exit from this loop. */
if (waitKey(27) >= 0) break;
}  // End of "for{;;} roop"
 
// The function below draws the chessboard corners which are found on the "frame1" image. Be careful this command does not display the "frame1" image.
drawChessboardCorners(frame1, boardSize, corners, found);
namedWindow("frame1", 1);      // Name the "frame1" window.
imshow("frame1", frame1);      // Now, I display "frame1" image.
}

まとめ

如何でしたか。本稿ではチェスボードの「かど」を捜すプログラムの手法について解説し、Source Codeを開示しています。最後までお読みいただき、ありがとうございました。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です