В случае, если цвет СИНЕГО представляет маску пользователя на передний план и цвет ЗЕЛЕНЫЙ представляет маску пользователя для фона, я получаю результат ниже. На самом деле только фон маркирует маски, выводятся в качестве фона:OpenCV grabCut только выводит значение маски в качестве фона
Screenshot http://s7.postimg.org/xwa8z5nez/maradona_problem.png]
Синие метки сохраняются в маске, как 0, в то время как зеленые сохраняются как 1.
Это мой код. Не могли бы вы помочь?
def run_grabcut():
global output
global mask
bgdmodel = np.zeros((1, 65),np.float64)
fgdmodel = np.zeros((1, 65),np.float64)
cv2.grabCut(img, mask, None, bgdmodel, fgdmodel, 1, cv2.GC_INIT_WITH_MASK)
mask2 = np.where((mask == 0), 255, 0).astype('uint8')
cv2.bitwise_and(img ,img , output, mask = mask2)
Обратите внимание, что если я использую 0, как BG и 1, как FG, а затем 'где ((маска == 1) ', Я получаю прямо противоположное - то есть все черное, за исключением пикселей с отметкой 1, которые выглядят как в исходном изображении. – vav
Можете ли вы предоставить полный код и изображение, которое выполняется? Знаете ли вы об этом примере кода? Https://github.com/Itseez/opencv/blob/master/samples/python/grabcut.py – tfv
Я, наконец, решил его использовать обходным путем, предполагая, что алгоритм не работает хорошо с маской, когда первый прямоугольник не передается первым. (minX, maxX, minY, maxY) зеленых меток и I creat e - их прямоугольник. Затем я сначала передаю прямоугольник алгоритму, чтобы получить маску - и когда у меня есть выходная маска algoeithm для прямоугольника, я добавляю к ней зеленые метки, а затем я использую алгоритм в режиме маски – vav