OpenCV C++ 简单小技巧 - 前背景分离 (20

GrabCut

原图必须是bgr图片,不能包含a通道

Mat mask = Mat::zeros(frame.rows, frame.cols, CV_8U);
Mat bgModel,fgModel;
cv::Rect rect(10,10,frame.cols-20,frame.rows-10);

grabCut(f1, mask, rect, bgModel, fgModel, 5, GC_INIT_WITH_RECT);
compare(mask, GC_PR_FGD, f2, CMP_EQ);
compare(mask, GC_PR_BGD, f3, CMP_EQ);

bitwise_and(f1, f1, f4, f2);
bitwise_and(f1, f1, f5, f3);

迭代了5次


image.png

修正遮罩

上面代码无法正常抠出这张图, 需要做遮罩处理,没成功,大家可以试试,将修改的阀值图给到mask然后处理的时候不用rect做参数,最后一项选择MASK方式。


image.png

GrabCut效率还是挺低的,一次迭代也很慢,而且效果不好。作为实时扣图不看好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容