【问题标题】:Unexpected result using opencv3 grabcut function in python在python中使用opencv3 grabcut函数出现意外结果
【发布时间】:2018-06-20 15:15:21
【问题描述】:

我试图在 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) ax@987654321@.imshow(out_mask) plt.show()

尽管将蒙版初始化到给定圆的中心,但它不会捕获完整的形状,而是坚持原始蒙版形状。增加迭代次数没有帮助。

p.s 我以此为例子,我得到了与真实图像相似的结果。

【问题讨论】:

    标签: python-3.x opencv3.0


    【解决方案1】:

    我需要将掩码启动为抓取枚举。 以下修复有效。

    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)
    

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 2018-09-03
      • 2022-08-22
      • 2013-11-07
      • 1970-01-01
      • 2013-05-02
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多