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

GrabCut

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

通过对于一开始取定的矩阵来做来模拟。
(这个我们可以通过调整这个点的以及对应的矩阵大小来调整效果)


下面就是算法提取出来的图像,以及原图
这里写图片描述

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

这里写图片描述

代码

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[:2], np.uint8)

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

rect = (60, 25, 500, 500)

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/a19990412/article/details/81182952