在python中使用opencv3抓取函数的意外结果

时间:2018-06-20 05:08:36

标签: python-3.x opencv3.0

我试图在Python 3.5中使用cv2.grabcut函数- 我使用cv2.GC_INIT_WITH_MASK作为初始化方法,但结果似乎很奇怪,并且输出掩码不是我期望的。

import cv2 import numpy as np import matplotlib.pyplot as plt # img = np.zeros((200,200, 3), 'uint8') mask = np.zeros((200,200), 'uint8') cv2.circle(img, (100,100), 50, (255,255,255), -1); cv2.circle(mask, (100,100), 5, 1, -1) # bgdModel = np.zeros((1,65),np.float64) fgdModel = np.zeros((1,65),np.float64) out_mask, out_bgdModel, out_fgdModel = cv2.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK) # print('opencv', cv2.version) # opencv 3.1.0 # fig,ax = plt.subplots(1,3) ax[0].imshow(img) ax[1].imshow(mask) ax2.imshow(out_mask) plt.show()

Example

尽管蒙版起始于给定圆的中心,但它无法捕获完整形状,但会保留原始蒙版形状。增加迭代次数没有帮助。

p.s我用作示例,我在真实图像上得到类似的结果。

1 个答案:

答案 0 :(得分:0)

我需要启动面具作为抓取枚举。 以下修复程序有效。

mask = np.full((200,200),cv2.GC_PR_BGD,np.uint8)
cv2.circle(mask, (100,100),  5,  int(cv2.GC_PR_FGD),  -1)

out_mask, _, _ = cv2.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK)