c/c++语言开发共享C++ opencv利用grabCut算法实现抠图示例

前言grabcut算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只用少量的用户交互操作,即可得到比较好的分割结果,和分水岭顺丰比较相似,但是计算速度比较慢,得到的结果比较精确用法:输入一幅图片

前言

grabcut算法利用了图像中的纹理(颜色)信息和边界(反差)信息,只用少量的用户交互操作,即可得到比较好的分割结果,和分水岭顺丰比较相似,但是计算速度比较慢,得到的结果比较精确

用法:输入一幅图片并对一些像素做属于背景或属于前景的标记,算法会根据这个局部标记计算出整个图像中前景和背景的分割线。

一、grabcut函数

void grabcut(inputarray img, inputoutputarray mask, rect rect,  		inputoutputarray bgdmodel, inputoutputarray fgdmodel,  		int itercount, int mode = gc_eval);  	img 输入图像  	mask 输出掩码  	rect 用户选择的前景矩形区域  	bgdmodel 输出背景图像  	fgdmodel 输出前景图像  	itercount 迭代次数  	mode 用于指示函数执行什么操作  

二、compare函数

compare函数主要用于两个图像之间进行逐像素的比较

void compare(inputarray src1, inputarray src2, outputarray dst, int cmpop);  	src1 原始图像1  	src2原始图像2  	dst 结果图像  	cmpop 操作类型  

三、代码

#include<iostream>  #include<opencv.hpp>  using namespace std;  using namespace cv;  int main()  {  	mat img1;  	img1 = imread("test2.jpg");  	imshow("原图", img1);  	rect rect(84, 84, 406, 318);  	mat img2, bg, fg;  	grabcut(img1, img2, rect, bg, fg,1,gc_init_with_rect);  	compare(img2, gc_pr_fgd, img2, cmp_eq);  	imshow("img2", img2);  	mat img3(img1.size(), cv_8uc3, scalar(255, 255, 255));  	img1.copyto(img3, img2);  	imshow("img3", img3);  	waitkey(0);  }  

效果图:

C++ opencv利用grabCut算法实现抠图示例

以上就是c++ opencv利用grabcut算法实现抠图示例的详细内容,更多关于c++ opencv grabcut算法抠图的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

需要了解更多c/c++开发分享C++ opencv利用grabCut算法实现抠图示例,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1247396.html

(0)
上一篇 2022年9月27日
下一篇 2022年9月27日

精彩推荐