天天看点

用GrabCut进行前景检测(对书中代码进行改进)Python

GrabCut

该算法,在opencv中很容易就可以使用。

通过对于一开始取定的矩阵来做来模拟。

(这个我们可以通过调整这个点的以及对应的矩阵大小来调整效果)

下面就是算法提取出来的图像,以及原图

用GrabCut进行前景检测(对书中代码进行改进)Python

下面这就是原图(就是代码的输入图片)

用GrabCut进行前景检测(对书中代码进行改进)Python

代码

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('3.jpg')
OLD_IMG = img.copy()
mask = np.zeros(img.shape[], np.uint8)

SIZE = ,)
bgdModle = np.zeros(SIZE, np.float64)
fgdModle = np.zeros(SIZE, np.float64)

rect = ,,,)

cv2.grabCut(img, mask, rect, bgdModle, fgdModle,, cv2.GC_INIT_WITH_RECT)

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

plt.subplot), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title("grabcut"), plt.xticks([]), plt.yticks([])

plt.subplot), plt.imshow(cv2.cvtColor(OLD_IMG, cv2.COLOR_BGR2RGB))
plt.title("original"), plt.xticks([]), plt.yticks([])

plt.savefig('GrabCut.png')
plt.show()