Как извлечь документ области интереса ID из изображения с OpenCV? - PullRequest
2 голосов
/ 21 января 2020

Я пытаюсь сегментировать это изображение, потому что мне нужно только получить документ.

enter image description here

Применяя некоторые фильтры, я получил такой результат:

enter image description here

Я пытаюсь получить контур белого прямоугольника, но получаю такой результат:

enter image description here

Кто-нибудь есть идеи, как сделать лучше?

это мой код: /

import cv2

image = cv2.imread('roberto.jpg')

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

_, binary = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('test', binary)
cv2.waitKey(0)

contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[-2:]
idx = 0 
for cnt in contours:
    idx += 1
    x,y,w,h = cv2.boundingRect(cnt)
    roi=binary[y:y+h,x:x+w]
    cv2.rectangle(image,(x,y),(x+w,y+h),(200,0,0),2)
cv2.imshow('img',image)
cv2.waitKey(0) 

1 Ответ

1 голос
/ 21 января 2020

Вы почти у цели, вам просто нужно получить координаты ограничивающего прямоугольника x,y,w,h, используя cv2.boundingRect, затем вы можете извлечь / сохранить область интереса, используя нарезку Numpy. Вот результат

enter image description here

import cv2

# Load image, grayscale, threshold
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)[1]

# Get bounding box and extract ROI
x,y,w,h = cv2.boundingRect(thresh)
ROI = image[y:y+h, x:x+w]

cv2.imshow('thresh', thresh)
cv2.imshow('ROI', ROI)
cv2.waitKey()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...