2017-09-15 34 views
2

私はopenCVの機能を使ってチェス盤を検出していますが、チェスボードは検出されていません。カメラキャリブレーション - チェス盤を検出できません

私が使用していた画像:

enter image description here

const Size chessboardDimensions = Size(4,8); 
int main (int argv, char ** argc) 
{ 
     frame = imread("/home/Georges/Desktop/a.jpg"); 
     cvtColor(frame, frame, CV_BGR2GRAY); 
     int found = findChessboardCorners(frame, chessboardDimensions, foundPoints, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE); 

} 

を常に0に等しいた誰かが私に理由を説明してもらえますか?この式サイズで

+0

が、それはあなたを伝えるパターンが見つかった場合には(私はそれがfalseを返した場合でも、見つかったコーナーを返します思います)。あなたの場合、サイズが間違っているので、パターンを見つけることができません。 – api55

+0

@ api55こんにちは、OPは私が使用したのと同じ画像を使用しているのを見たので、私はコメントとしてここに私の質問を掲示したいと思います。私の質問の話題は非常に具体的なので、私はそれが多くの注目を集めることはないだろうと確信しています。 https://stackoverflow.com/questions/46225943/how-to-correctly-calibrate-my-camera-with-a-wide-angle-lens-using-opencv/ 私が直面している問題についてのご意見はありますか? – privetDruzia

答えて

4
const Size chessboardDimensions = Size(4,8); 

あなたは、内側の正方形の四隅を数える必要があるため

Size(5,8) 

でなければなりません。

編集:

コメントで述べたように、int foundboolでなければなりません。角が見つかったかどうかを返します。

そして提案などそれ以外の機能は、ラグ動作する可能性があり、あなたの関数に速いチェックオプションを追加します。

bool found = findChessboardCorners(frame, chessboardDimensions, foundPoints, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE | CALIB_CB_FAST_CHECK); 

そしてすべてのポイントが正常に見つかったかどうかを確認することをお勧めします。場合によっては、全ての点を検出することができず、更なる応用例において、この状況は誤りをもたらす。この関数の出力は別の関数の入力となるためです。だからあなたのループに進み式を追加:BOOLないint型でなければなりません見つけ

if(found == 0 || foundPoints.size() != chessboardDimensions.area()) 
    continue; 
+0

このような愚かなタイプミス!私はあなたの答えを数分で受け入れます。 – LandonZeKepitelOfGreytBritn

関連する問題