我在iOS上使用OpenCV。
当我在grabCut
文件中运行以下.mm
函数并提供以下内容时:
我希望分别看到inclStrokesDebug
和exclStrokesDebug
的白色“ I”和“ E”,但是现在我看到了
但为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”。
是否由于某些内存未释放问题?
答案 0 :(得分:0)
由于未知原因,我提供Alpha Bool时问题似乎已解决。我正在使用OpenCV 3.4.4
cv::Mat cvt2Mask (const UIImage * img) {
...
UIImageToMat(img, maskX, true);
...
return maskX;
}