2016-06-21 2 views

ответ

0

Вы можете использовать grab-cut алгоритм -

То, что вы должны сделать, это указать область изображения which'll выступать в качестве переднего плана в виде прямоугольника. Алгоритм займет немного времени и выкинет ваше требуемое изображение ... Код здесь требует небольшого количества настроек.

import numpy as np 
import cv2 
#a is your image 
img = cv2.imread('a.jpg') 
mask = np.zeros(img.shape[:2],np.uint8) 

bgdModel = np.zeros((1,65),np.float64) 
fgdModel = np.zeros((1,65),np.float64) 

rect = (360,85,1670, 1900) 
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT) 

mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8') 
img = img*mask2[:,:,np.newaxis] 

cv2.imshow('image',img) 
cv2.waitKey(0) 

Конечный результат в источнике даст вам лучший результат (после применения некоторых масок) ... Но, как я сказал, вы можете изменить его в соответствии с вашими желаниями.

enter image description here Источники -

http://docs.opencv.org/3.1.0/d8/d83/tutorial_py_grabcut.html#gsc.tab=0

+0

Это не работает для меня. Python останавливается. – Gabe

+0

Один из способов - изменить размер изображения перед применением grab-cut ...., это уменьшит размер изображения, тем самым уменьшив время работы алгоритма. – hashcode55

+0

Размер не имеет значения, он продолжает выходить через несколько секунд (сила закрывается) – Gabe

Смежные вопросы