GrabCut не может работать в моем коде, и я не знаю, чтобы изменить код
Я хочу найти передний план изображения с помощью Grabcut, ниже приведен код
import cv2
import numpy as np
from matplotlib import pyplot as plt
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
img=cv2.imread(r'D:\Python Code\Grabcut\fqx.jpg')
cv2.imshow('src',img)
mask = np.zeros(img.shape[:2],np.uint8)
rect=(155,1,367,640)
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]
plt.imshow(img),plt.colorbar(),plt.show()
cv2.imshow('img',img)
cv2.waitKey(0)
но результат не идеален
поэтому я имитирую "Интерактивное извлечение переднего плана с использованием алгоритма GrabCut" с официального сайта OpenCV, код ниже
import cv2
import numpy as np
from matplotlib import pyplot as plt
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
img=cv2.imread(r'D:\Python Code\Grabcut\fqx.jpg')
cv2.imshow('src',img)
mask = np.zeros(img.shape[:2],np.uint8)
rect=(155,1,367,640)
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]
#plt.imshow(img),plt.colorbar(),plt.show()
cv2.imshow('img',img)
# newmask is the mask image I manually labelled
newmask = cv2.imread(r'D:\Python Code\Grabcut\newmark.jpg',0)
# whereever it is marked white (sure foreground), change mask=1
# whereever it is marked black (sure background), change mask=0
mask[newmask == 0] = 0
mask[newmask == 255] = 1
mask, bgdModel, fgdModel =
cv2.grabCut(img,mask,None,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_MASK)
mask = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask[:,:,np.newaxis]
plt.imshow(img),plt.colorbar(),plt.show()
cv2.waitKey(0)
и новая маска в том, что
и возникает проблема: после запуска кода возникает ошибка TypeError: объект NoneType не повторяется. Я изменяю параметр "Нет", но он все еще не может работать.