Как отделить дартс от фона с помощью OpenCV?

Я использую Python и OpenCV. Я хотел бы отделить дартс от фона. Я попробовал это с помощью findContours и обнаружения краев Canny, но не смог этого сделать.

Пример изображения:

введите здесь описание изображения


person Gabe    schedule 21.06.2016    source источник


Ответы (1)


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

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

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)

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

введите здесь описание изображения Источники -

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

person hashcode55    schedule 21.06.2016
comment
Один из способов - изменить размер изображения перед применением захвата...., это уменьшит размер изображения, тем самым сократив время работы алгоритма. - person hashcode55; 21.06.2016
comment
Размер не имеет значения, он продолжает выходить через несколько секунд (принудительное закрытие) - person Gabe; 21.06.2016
comment
Я отредактировал ответ. Мне удалось получить это изображение без каких-либо настроек. - person hashcode55; 21.06.2016
comment
Чем я думаю, что у меня проблема с моим компьютером - person Gabe; 21.06.2016