2016-03-25 3 views
0

В случае, если цвет СИНЕГО представляет маску пользователя на передний план и цвет ЗЕЛЕНЫЙ представляет маску пользователя для фона, я получаю результат ниже. На самом деле только фон маркирует маски, выводятся в качестве фона: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

Обратите внимание, что если я использую 0, как BG и 1, как FG, а затем 'где ((маска == 1) ', Я получаю прямо противоположное - то есть все черное, за исключением пикселей с отметкой 1, которые выглядят как в исходном изображении. – vav

+0

Можете ли вы предоставить полный код и изображение, которое выполняется? Знаете ли вы об этом примере кода? Https://github.com/Itseez/opencv/blob/master/samples/python/grabcut.py – tfv

+0

Я, наконец, решил его использовать обходным путем, предполагая, что алгоритм не работает хорошо с маской, когда первый прямоугольник не передается первым. (minX, maxX, minY, maxY) зеленых меток и I creat e - их прямоугольник. Затем я сначала передаю прямоугольник алгоритму, чтобы получить маску - и когда у меня есть выходная маска algoeithm для прямоугольника, я добавляю к ней зеленые метки, а затем я использую алгоритм в режиме маски – vav

ответ

0

В строке

mask2 = np.where((mask == 0), 255, 0).astype('uint8') 

вы отображение всех фоновые пикселов (маска == 0) до значения 255 и всех других типов (например, переднего плана; маска == 1) Значение 0

Добавление

mask3 = np.where((mask == 1), 127, 0).astype('uint8') 

бы создать отдельную маску для переднего плана. Это то, что вы ищите?

Или вы хотите, чтобы также включать потенциальные фоны (маска == 2)

mask2 = np.where((mask==0) + (mask==2),255,0).astype('uint8') 
Смежные вопросы