天天看點

用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()