OpenCV satranç tahtası köşelerini nasıl bulur?


Yanıtlar:


12

OpenCV kaynak kodu mevcuttur, bu yüzden sadece kod üzerinden biraz zaman ayırmanızı tavsiye ederim. Bu özel işlevin ilgili dosyası:

calib3d / src / calibinit.cpp

Ona ayrıntılı olarak bakmadım, ama öyle görünüyor

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

bu yöntemin ana uygulamasıdır. Burada onlar

  1. cvCheckChessboardBir satranç tahtasının resimde olup olmadığını belirlemek için kullanın
  2. İkili (S&B) dönüştürün ve köşeleri ayırmak için genişletin
  3. icvGenerateQuadsKareleri bulmak için kullanın .

Daha sonra kod denetimler seti bu yoğunlaşmasına rağmen gitmek gibi görünüyor quadsdahil satranç tahtası köşelerine kadar icvFindConnectedQuads, icvCleanFoundConnectedQuadsekstra köşeleri, kaldırmak icvCheckQuadGroupve icvCheckBoardMonotony.

Bu işlevlerin tümü haricinde aynı dosyada uygulanan cvCheckChessboardedildiği olup calib3d / src / checkchessboard.cpp . Kodu ne kadar iyi anlamak istediğinize bağlı olarak #define DEBUG_CHESSBOARD, neler olup bittiğini görmenize yardımcı olabilecek bir dizi hata ayıklama satırı var gibi görünüyor .


1
Cevabınız için teşekkürler. Bakabileceğimi biliyorum, ama sadece merak ettim, ama kaynak kodunu geçecek kadar merak etmedim. Birisi bir süre dışarı bu anladım umulmaktadır.As ve ilkeleri :) açıklayabilir
Geerten

1
Güzelce yazılmış bir kağıt buldum ... aynı zamanda (yazara göre) daha istikrarlı ve daha hızlı bir alternatif yöntem de sunuyor Researchgate.net/publication/…
philippe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.