OpenCVはどのようにしてチェス盤のコーナーを見つけるのですか?


回答:


12

OpenCVのソースコードが利用できるので、少し時間をかけてコードを確認することをお勧めします。この特定の機能に関連するファイルは次のとおりです。

calib3d / src / calibinit.cpp

詳細には調べていませんが、

CV_IMPL
int cvFindChessboardCorners( const void* arr, CvSize pattern_size,
                             CvPoint2D32f* out_corners, int* out_corner_count,
                             int flags )

このメソッドのメインの実装です。ここでは

  1. cvCheckChessboard画像にチェス盤があるかどうかを判断するために使用します
  2. バイナリ(白黒)に変換し、拡張してコーナーを分割します
  3. icvGenerateQuads正方形を見つけるために使用します。

コードは、これらを凝縮するために一連のチェックかかわらず行くように見えるquadsなど、チェス盤のコーナーにicvFindConnectedQuadsicvCleanFoundConnectedQuads余分なコーナーを削除するためにicvCheckQuadGroup、とicvCheckBoardMonotony

これらの関数はすべてcvCheckChessboardcalib3d / src / checkchessboard.cppにあるものを除いて、同じファイルに実装されています。コードをどの程度理解したいかに応じて#define DEBUG_CHESSBOARD、何が起こっているのかを確認するのに役立つデバッグ行がいくつかあるようです。


1
ご回答有難うございます。私はそれを調べることができることを知っています、しかし私は好奇心が強いだけでしたが、ソースコードを調べるほど十分に好奇心がありませんでした。私は誰かが
いつか

1
私は(作者によれば)も、より安定している別の方法を提供することを...うまく書かれた紙を発見し、より速くresearchgate.net/publication/...
フィリップ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.