Здравствуйте!
Что-то не ладятся у меня дела с opencv в python. наверное потому что программировал очень долгое время вообще в другом русле.
Проблема у меян вот какая и я буду благодарен за примеры, подсказки и тд:
Есть некая картинка (как правило отсканированый документ) в котрором есть серые прямоугольники. моя задача вырезать эти прямоугольники (впоследствии распознать, но с этим проблем нет). Их может быть любое количество на картинке и в любом месте.
Я пришел вот к такому коду:
#!/usr/bin/env python
import cv2
import os
img_path = os.path.join('img', '1.jpg')
image = cv2.imread(img_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 30, 200)
cv2.imshow('gray', gray)
cv2.waitKey(0)
cv2.imshow('edged', edged)
cv2.waitKey(0)
(_, cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in cnts:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
if len(approx) == 4:
cv2.drawContours(image, [approx], -1, (0, 255, 0), 3)
cv2.imshow('result', image)
cv2.waitKey(0)
Данный код находит много мусора - это во первых. Во вторых, он находит вообще все прямоугольники, а не только те, которые с бекграундом. В третьих, нутром чую, что код какой-то не правильный.
Подскажите, пожалуйста, чего подправить-добавить-поизучать дабы решить мою задачу?
Исходная картинка: