Làm thế nào để OpenCV tìm thấy các góc bàn cờ?


Câu trả lời:


12

Mã nguồn của OpenCV có sẵn, vì vậy tôi khuyên bạn chỉ nên dành chút thời gian để xem mã. Các tập tin liên quan cho chức năng cụ thể này là:

calib3d / src / calibinit.cpp

Tôi đã không nhìn vào nó một cách chi tiết, nhưng có vẻ như

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

là thực hiện chính của phương pháp này. Ở đây họ

  1. Sử dụng cvCheckChessboardđể xác định xem bàn cờ có trong hình ảnh không
  2. Chuyển đổi thành nhị phân (B & W) và giãn ra để tách các góc
  3. Sử dụng icvGenerateQuadsđể tìm các hình vuông.

Mã sau đó dường như đi qua một tập hợp các kiểm tra để cô đọng những thứ này quadsvào các góc bàn cờ, bao gồm icvFindConnectedQuads, icvCleanFoundConnectedQuadsđể loại bỏ các góc bổ sung icvCheckQuadGroup, và icvCheckBoardMonotony.

Tất cả các chức năng này được thực hiện trong cùng một tệp, ngoài ra cvCheckChessboardcòn có trong calib3d / src / checkchessboard.cpp . Tùy thuộc vào mức độ bạn muốn hiểu mã, dường như có một số dòng gỡ lỗi, có thể được bao gồm nếu bạn #define DEBUG_CHESSBOARD, điều đó có thể giúp bạn thấy những gì đang diễn ra.


1
Cảm ơn câu trả lời của bạn. Tôi biết tôi có thể tra cứu nó, nhưng tôi chỉ tò mò, nhưng không đủ tò mò để đi qua mã nguồn. Tôi hy vọng ai đó đã tìm ra điều này một thời gian, và có thể giải thích các nguyên tắc :)
Geerten

1
Tôi tìm thấy một giấy độc đáo bằng văn bản ... mà còn cung cấp một phương pháp khác đó là ổn định và nhanh hơn (theo tác giả) researchgate.net/publication/...
Philippe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.