私はOpenCVでC++コードを書いています。ここでは、画像(.jpgファイルからロードされた)上のチェス盤を検出して、画像の遠近法を歪めようとしています。findChessboardCorners()によってチェス盤が見つかると、残りのコードは完全に機能します。ただし、関数がパターンを検出しない場合があり、この動作はランダムに見えます。
たとえば、元の解像度2560x1920で機能する画像が1つありますが、最初にGIMPで800x600に縮小した場合は機能しません。ただし、別の画像は逆のように見えます。元の解像度では機能しませんが、縮小されて機能します。
検出を行う私のコードの一部は次のとおりです。
Mat grayimg = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
if (img.data == NULL) {
printf("Unable to read image");
return 0;
}
bool patternfound = findChessboardCorners(grayimg, patternsize, corners,
CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_FAST_CHECK);
if (!patternfound) {
printf("Chessboard not found");
return 0;
}
この動作を引き起こすopencvに何らかのバグがありますか?関数がより一貫して機能するように、画像を前処理する方法について誰かがヒントを持っていますか?
パラメータCALIB_CB_ADAPTIVE_THRESH、CALIB_CB_NORMALIZE_IMAGE、CALIB_CB_FILTER_QUADS、およびCALIB_CB_FAST_CHECKを試してみました。カラー画像を渡すときにも同じ結果が得られます。
前もって感謝します
編集:私はOpenCVバージョン2.4.1を使用しています