Я пытаюсь обнаружить игральные карты и преобразовать их, чтобы получить представление о карте с высоты птичьего полета, используя python opencv. Мой код отлично работает для простых случаев, но я не остановился на простых случаях и хочу попробовать более сложные. У меня проблемы с поиском правильных контуров для карт. Вот прикрепленное изображение, на котором я пытаюсь обнаружить карты и нарисовать контуры:
Мой код:
path1 = "F:\\ComputerVisionPrograms\\images\\cards4.jpeg"
g = cv2.imread(path1,0)
img = cv2.imread(path1)
edge = cv2.Canny(g,50,200)
p,c,h = cv2.findContours(edge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rect = []
for i in c:
p = cv2.arcLength(i, True)
ap = cv2.approxPolyDP(i, 0.02 * p, True)
if len(ap)==4:
rect.append(i)
cv2.drawContours(img,rect, -1, (0, 255, 0), 3)
plt.imshow(img)
plt.show()
Результат:
Это не то, что я хотел, я хотел, чтобы были выбраны только прямоугольные карты, но, поскольку они перекрывают друг друга, я не получаю того, что ожидал. Я считаю, что мне нужно применить морфологические приемы или другие операции, чтобы, возможно, разделить их или сделать края более заметными, или может быть что-то еще. Было бы очень признательно, если бы вы могли поделиться своим подходом к решению этой проблемы.
Еще несколько примеров, запрошенных другими коллегами: