Есть ли способ закрасить интерьер изображения белым? - PullRequest
2 голосов
/ 09 июня 2019

Например, в MATLAB Image Processing Toolbox у нас есть функция imfill. Как я могу сделать это в Python?

Поэтому я пытаюсь сегментировать различные фигуры и убирать из интерьера черных. Я знаю, что если я получу границы, то сегментирование все еще будет легким, но я хочу также определить идеальные формы. Короче говоря, я хочу удалить черную покрытую область на моем изображении, как показано.

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

image=cv2.imread('rec2.jpg')
kernel = np.ones((5,5),np.uint8)
w=int(image.shape[1]*0.3)
h=int(image.shape[0]*0.5)
resized = cv2.resize(image,(w, h), interpolation = cv2.INTER_CUBIC)
gray = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY_INV)[1]
thresh2 = cv2.threshold(blurred, 200, 255, cv2.THRESH_BINARY)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
print(len(cnts[1])) #To verify number of counts
cv2.imshow("Result",np.hstack((thresh,thresh2)))

enter image description here

Это пока что сегментированное изображение. Но я хочу, чтобы эти внутренние черные зоны тоже были заполнены белым, чтобы его можно было идентифицировать как сплошную форму.

1 Ответ

0 голосов
/ 10 июня 2019

Вы можете нарисовать заполненные контуры, определив thickness=cv2.FILLED:

cv2.drawContours(thresh, cnts, -1, (255, 255, 255), thickness=cv2.FILLED)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...