【问题标题】:UIImageToMat() retains data from previous callsUIImageToMat() 保留以前调用的数据
【发布时间】:2019-05-02 21:44:03
【问题描述】:

我在 iOS 上使用 OpenCV。

当我在.mm 文件中运行下面的grabCut 函数并提供:

inclStrokesImg 的绿色“我”

exclStrokesImg 的红色“E”

我希望看到 inclStrokesDebugexclStrokesDebug 分别有一个白色的“I”和“E”,但现在我看到了

“inclStrokesDebug”的“I”(预期)

但是exclStrokesDebug 的“IE”(不正确,只希望看到 E)

cv::Mat cvt2Mask (UIImage * img) {
    cv::Mat mask ;

    if (img == nil){
        return mask;
    }
    UIImageToMat(img, mask);
    cv::cvtColor(mask, mask, CV_RGBA2GRAY);
    cv::threshold(mask, mask, 1, 255, cv::THRESH_BINARY);

    return mask;
}

+(UIImage *)grabCut:(UIImage *)srcImg withMask:(UIImage *)maskImg andInclusiveStrokes:(UIImage *)inclStrokesImg andExclusiveStrokes:(UIImage *)exclStrokesImg {
    // Returns an inclusive mask image

    cv::Mat src;
    UIImageToMat(srcImg, src);

    cv::Mat mask = cvt2Mask(maskImg);
    cv::Mat inclStrokes = cvt2Mask(inclStrokesImg);
    cv::Mat exclStrokes = cvt2Mask(exclStrokesImg);

    #ifdef DEBUG
    UIImage * maskDebug = MatToUIImage(mask);
    UIImage * inclStrokesDebug = MatToUIImage(inclStrokes);
    UIImage * exclStrokesDebug = MatToUIImage(exclStrokes);
    #endif

    ...

    return ...;
}

我检查了cvt2mask 函数,UIImageToMat() 出错并返回了与之前结果相结合的结果。

我使用相同的参数再次运行grabCut 函数,inclStrokesDebug 现在将返回“IE”而不是我在第一次调用中看到的“I”。

是不是因为一些内存没有释放的问题?

【问题讨论】:

    标签: c++ ios objective-c opencv memory-management


    【解决方案1】:

    由于未知原因,当我提供 alpha bool 时,问题似乎已解决。我正在使用 OpenCV 3.4.4

    cv::Mat cvt2Mask (const UIImage * img) {
        ...
        UIImageToMat(img, maskX, true);
        ...
    
        return maskX;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      相关资源
      最近更新 更多