我使用以下代码使用grabCut算法:
cv::Mat img=[self cvMatFromUIImage:image];
cv::Rect rectangle(10,10,300,150);
cv::Mat result; // segmentation (4 possible values)
cv::Mat bgModel,fgModel; // the models (internally used)
// GrabCut segmentation
cv::grabCut(img, // input image
result, // segmentation result
rectangle, // rectangle containing foreground
bgModel,fgModel, // models
3, // number of iterations
cv::GC_INIT_WITH_RECT); // use rectangle
// Get the pixels marked as likely foreground
cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ);
// Generate output image
cv::Mat foreground(img.size(),CV_8UC3,
cv::Scalar(255,255,255));
result=result&1;
img.copyTo(foreground, result);
result);
image=[self UIImageFromCVMat:foreground];
ImgView.image=image;
Run Code Online (Sandbox Code Playgroud)
转换UIImage为的代码Mat image如下所示
- (cv::Mat)cvMatFromUIImage:(UIImage *)imge
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(imge.CGImage);
CGFloat cols = imge.size.width;
CGFloat rows = imge.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
CGContextRef contextRef = CGBitmapContextCreate(
cvMat.data, // Pointer to data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault);
// Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), imge.CGImage);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
return cvMat;
}
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
OpenCV错误:在grabCut中有错误的参数(图像必须具有CV_8UC3类型).
如果我换
cv::Mat cvMat(rows, cols, CV_8UC4);行,cv::Mat cvMat(rows, cols, CV_8UC3);
那我就明白了<Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaNoneSkipLast; 342 bytes/row..
我在这里很困惑.
请帮忙
sie*_*hie 16
问题似乎是,你得到的图像有一个alpha通道,而grabcut需要一个没有alpha通道的rgb图像.所以你需要摆脱额外的渠道.
例如,您可以使用此功能执行此操作:
cv::cvtColor(img , img , CV_RGBA2RGB);
Run Code Online (Sandbox Code Playgroud)
这会解决您的问题吗?
| 归档时间: |
|
| 查看次数: |
5229 次 |
| 最近记录: |