OpenCV中用GrabCut进行前景检测

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("img3.jpg")
mask = np.zeros(img.shape[:2], np.uint8) #与图片同大小的掩模
bgdModel = np.zeros((1,65), np.float64)
fgdModel = np.zeros((1,65), np.float64)

rect = (30, 64, 536, 890) #定义矩形区域,区域外的被认为是背景,区域中的部分会识别是背景还是前景
cv2.grabCut(img, mask,rect, bgdModel, fgdModel, 50, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0), 0, 1).astype('uint8')
img = img * mask2[:, :, np.newaxis]
# plt.subplot(121)
plt.imshow(img)
plt.show()

检测结果:

OpenCV中用GrabCut进行前景检测