Как получить контур переднего плана на белом фоне с помощью OpenCV? - PullRequest
1 голос
/ 28 марта 2019

Цель:

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

Из-за этого я пытаюсь использовать OpenCV для создания своего собственного набора данных.Проблема в том, что я не могу получить согласованные результаты с разными изображениями.

Вот код, который я взял с веб-сайта OpenCV для создания контуров:

import numpy as np
from matplotlib import pyplot as plt
import cv2

im = cv2.imread('./jackets/jacket.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# Create an output of all zeroes that has the same shape as the input
# image
out = np.zeros_like(im)

# On this output, draw all of the contours that we have detected
# in white, and set the thickness to be 3 pixels
cv2.drawContours(out, contours, 1, 255, cv2.FILLED)

# Spawn new windows that shows us the donut
# (in grayscale) and the detected contour
cv2.imshow('Original', im) 
cv2.imshow('Generated Mask', out)

# Wait indefinitely until you push a key.  Once you do, close the windows
cv2.waitKey(0)
cv2.destroyAllWindows()

Этот код отлично подходит длянекоторые фотографии, дающие мне именно то, что я хочу.Вот пример того, как OpenCV делает то, что я хочу:

OpenCV when is contours successfully

К сожалению, это не работает для всех моих изображений.Вот несколько примеров, где он неожиданно выходит из строя.

Пример 1:

Fail #1

Пример 2:

enter image description here

У кого-нибудь есть предложения по исправлению этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...