Задать вопрос
@ilyagod
Кодю код

Как вырезать прямоугольники с бекграундом используя OpenCV и Python?

Здравствуйте!
Что-то не ладятся у меня дела с 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)


Данный код находит много мусора - это во первых. Во вторых, он находит вообще все прямоугольники, а не только те, которые с бекграундом. В третьих, нутром чую, что код какой-то не правильный.

Подскажите, пожалуйста, чего подправить-добавить-поизучать дабы решить мою задачу?

Исходная картинка:
10a122b468914c72a17ad3e73ae4a045.jpg
  • Вопрос задан
  • 644 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mirspo
Я бы задачу наверное поделил:
1) Найти все серые прямоугольники - уже есть.
2) Исключить из найденного не нужное - по гистограмме цветов , либо там наложением фильтров - это уже вопрос не про питон, а РО.
ЗЫ думаю не совсем понял вопрос
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы