Функция cv2 finndchessboardcorners не работает должным образом с моими изображениями

Я пытаюсь распознать шахматную доску с помощью opencv(cv2) и python. Я использую встроенную функцию findchessboardcorners, которая ничего не возвращает, если не находит доску с отверстиями. Сейчас я использую этот code.

В большинстве случаев функция просто устанавливает значение ret в False, что означает, что она ничего не нашла. Доска распознается только примерно в одной шестой случаев.

Кто-нибудь знает, как улучшить распознавание? Полагаю, мне нужно уменьшить шум, но medianBlur уже это делает. Это проблема с самой функцией?

Вот несколько изображений, которые я использовал:

введите описание изображения здесьвведите описание изображения здесьвведите описание изображения здесьвведите описание изображения здесь

Функция findchessboardorners должна работать со всеми изображениями.

img=cv2.imread(path_board)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)      
ret, corners = cv2.findChessboardCorners(gray, number_of_corners,
                                        flags=cv2.CALIB_CB_ADAPTIVE_THRESH +
                                            cv2.CALIB_CB_FAST_CHECK +
                                            cv2.CALIB_CB_NORMALIZE_IMAGE + cv2.CALIB_CB_EXHAUSTIVE)
if ret == True:
    print("Chessboard detected")
   img_with_corners = cv2.drawChessboardCorners(img_with_corners, (BOARD_SIZE + 1,BOARD_SIZE + 1), all_corners.reshape(-1, 1, 2), ret)
else:
    print("No chessboard detected")
Прокл
Вопрос задан10 января 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.