【问题标题】:How to reuse models from grabcut in OpenCV?如何在 OpenCV 中重用 Grabcut 中的模型?
【发布时间】:2021-03-04 13:34:35
【问题描述】:

我遇到了与此处描述的问题类似(或相同?)的问题:Reusing models from grabcut in OpenCV。但是,这个问题似乎根据https://github.com/opencv/opencv/issues/9191 得到了纠正。这是我的代码:

import numpy as np
import cv2 as cv

img = cv.imread("image.jpg")
rect = (0, 773, 517, 1183)

bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)

mask, bgdModel, fgdModel = cv.grabCut(img, None, rect, bgdModel, fgdModel, 5, cv.GC_INIT_WITH_RECT)

mask = np.zeros(img.shape[:2], np.uint8)
mask, bgdModel, fgdModel = cv.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv.GC_EVAL)

在第一次调用 grabCut 之后,我在 mask 中得到了正确的结果(这确实很棒!)。但是,在第二次调用 grabCut 之后,掩码仅包含零值。我期望得到与以前完全相同的结果。我做错了什么或误解了如何使用 cv.GC_EVAL 模式?我正在尝试重用模型,就像 ipa Reusing models from grabcut in OpenCV 的初始帖子一样。

使用 cv.GC_EVAL_FREEZE_MODEL 时,我得到了相同的结果。我正在使用 opencv-python 4.4.0.42 和 python 3.6。

非常感谢您的回答!

【问题讨论】:

    标签: python opencv opencv-python


    【解决方案1】:

    我找到了解决方案,我正在与您分享:)。我已将最后两行替换为以下行:

    mask = np.ones(img.shape[:2], np.uint8)*cv.GC_PR_BGD
    mask, bgdModel, fgdModel = cv.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv.GC_EVAL_FREEZE_MODEL)
    

    HTH,

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 1970-01-01
      • 2014-07-11
      • 2012-12-16
      • 2015-09-01
      • 2017-07-17
      • 2014-11-20
      • 1970-01-01
      • 2019-05-22
      相关资源
      最近更新 更多