Funkcja OpenCV findChessboardCorners nie działa w (najwyraźniej) prostym scenariuszu

Próbuję znaleźć rogi szachownicy przy użyciu OpenCV.

Obraz, którego używam, zawiera dwie szachownice, ale interesuje mnie tylko podregion jednego z nich. Poniższy obraz przedstawia oryginalny obraz.

Używając GIMP, wybrałem obszar zainteresowania i ustawiłem drugi piksel na wartość domyślną.

Właściwie nie przyciąłem obrazu, ponieważ skalibrowałem aparat przy użyciu tego rozmiaru obrazu i nie chciałem go zmieniać. Operacja powinna być równoważna zmianie wartości w matrycy obrazu, ale wolałem to zrobić za pomocą GIMP. Jest to eksperyment jednorazowy i szybsze jest wykonanie tej operacji za pomocą narzędzia graficznego zamiast używania kodu.

Wynikowy obraz zawiera szachownicę z rogami 24x5, ale funkcja findChessboardCorners nie jest w stanie niczego znaleźć.

Oto kod Pythona, którego używam:

>>> img = cv2.imread('C:\\Path\\To\\C4-Cropped.png', 0)
>>> cv2.findChessboardCorners(img, (24, 5))
(False, None)
>>> cv2.findChessboardCorners(img, (5, 24))
(False, None)

Próbowałem także ustawić próg adaptacyjny, ale nadal nie działa

>>> cv2.findChessboardCorners(img, (24, 5), flags=cv2.cv.CV_CALIB_CB_ADAPTIVE_THRESH)
(False, None)

To wydaje się naprawdę dziwne. Korzystałem z tej funkcji OpenCV wiele razy w przeszłości i zawsze działała, nawet w przypadku obrazów, które wyglądały znacznie bardziejskomplikowane niż ten. Oświetlenie obszaru nie jest jednorodne, ale funkcja powinna być wystarczająco mocna, aby sobie z tym poradzić.

Czy jest jakiś problem zsztuczny obraz utworzony ad hoc za pomocą GIMP? Jak mogę znaleźć rogi?

Wszelkie sugestie byłyby bardzo mile widziane.

questionAnswers(5)

yourAnswerToTheQuestion