OpenCv не может найти шаблон шахматной доски на многих моих изображениях, а Matlab - нет.

Я делаю калибровку камеры GoPro с помощью OpenCv. Но findChessboardCorners возвращает false на многих моих изображениях, а Matlab - нет. Я пытался биниразовать изображения, чтобы помочь OpenCv, но это помогает только в некоторых случаях. Вот пример:

Образец Биниразеда

Вот код:

CHECKERBOARD = (6,9)
 img = cv2.imread('1.JPG') 
 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

 ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE) 
 print(ret)

Я пробовал разные флаги. OpenCv не работает, а Matlab - нет. Намек?


person Brans    schedule 25.10.2019    source источник
comment
Вы хотите отменить искажение изображения перед обнаружением углов. Вот статья об этом на Python. medium.com/@kennethjiang/   -  person Grebtsew    schedule 26.10.2019
comment
Можете ли вы объяснить, что вы имеете в виду, пытаясь найти узор на шахматной доске? Вы пытаетесь создать ограничительную рамку вокруг всей доски или пытаетесь найти углы?   -  person nathancy    schedule 26.10.2019
comment
@nathancy findChessboardCorners возвращает false   -  person Brans    schedule 26.10.2019
comment
@Grebtsew findChessboardCorners - вернуть false, не удалось найти углы шахматной доски   -  person Brans    schedule 26.10.2019
comment
Я предполагаю, что, когда функция выполняет порог, она не может определить границу шахматной доски, поскольку фон и белые части доски смешаны вместе.   -  person nathancy    schedule 26.10.2019
comment
Я согласен с @nathancy, если вы измените размер изображения, оно удалит некоторые смешанные пиксели, и вы получите немного лучшие результаты. Итак, добавьте: img = cv2.resize (img, (int (400), int (400)))   -  person Grebtsew    schedule 26.10.2019
comment
Без бинаризации исходных изображений бумага с такой шахматной доской сильно отличается от цвета фона, и результат будет таким же. На одном из изображений такая ручная бинаризация помогла openCv   -  person Brans Ds    schedule 26.10.2019


Ответы (1)


Кажется, что изменение размера изображения работает.

Пример кода:

import cv2
import numpy as np

CHECKERBOARD = (6,9)

img = cv2.imread("Q2l11.jpg")
img = cv2.resize(img,(int(400),int(400)))


gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE)
print(corners)
#print(ret)

corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,(0,0,255),-1)

cv2.imshow('Corners',img)

cv2.waitKey(0)

Результат:  Результат обнаружения

person Grebtsew    schedule 25.10.2019