资源简介
openCV中grabcut图像分割函数使用示例,使用VS2017和opencv3.4.3编译64位版本

代码片段和文件信息
#include
#include
#include
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/imgproc/imgproc.hpp“
#include
#include
using namespace std;
using namespace cv;
const string winName = “image“;
const Scalar RED = Scalar(00255);
const Scalar BLUE = Scalar(25500);
Mat outImage;
void getBinMask( const Mat& comMask Mat& binMask ) //comMask 变换成binMask
{
if( comMask.empty() || comMask.type()!=CV_8UC1 )
CV_Error( CV_StsBadArg “comMask is empty or has incorrect type (not CV_8UC1)“ );
if( binMask.empty() || binMask.rows!=comMask.rows || binMask.cols!=comMask.cols ) binMask.create( comMask.size() CV_8UC1 );
binMask = comMask & 1;
}
void changeMask( Mat& mask vector bgdPixels vector fgdPixels ) //把mask中的的前景背景改变
{
vector::const_iterator it = bgdPixels.begin() itEnd = bgdPixels.end();
for( ; it != itEnd; ++it )
mask.at(*it) = GC_BGD;
it = fgdPixels.begin() itEnd = fgdPixels.end();
for( ; it != itEnd; ++it )
mask.at(*it) = GC_FGD;
}
void showImage( Mat& _img Mat& _mask vector& _bgdPxls vector& _fgdPxls ) //加载显示图像
{
Mat res;
Mat binMask;
if( _mask.empty() ) //_mask为空,直接拷贝
_img.copyTo( res ); //_img -> res
else //_mask不为空,变换后拷贝
{
getBinMask( _mask binMask ); //bin
_img.copyTo( res binMask ); //_img - binMask -> res 只拷贝binMask非空时_img的像素
}
vector::const_iterator it;
for( it = _bgdPxls.begin(); it != _bgdPxls.end(); ++it ) //画出背景信息
circle( res *it 1 BLUE ); //(图像,圆心坐标,圆心半径,颜色)
// 函数cvCircle绘制或填充一个给定圆心和半径的圆。
//圆被感兴趣矩形所裁剪。 若指定圆的颜色,可以使用宏 CV_RGB ( r g b )。
for( it = _fgdPxls.begin(); it != _fgdPxls.end(); ++it ) //画出前景信息
circle( res *it 1 RED );
imshow( winName res );
res.copyTo(outImage);
}
Mat image;
Mat mask;
Mat bgdModel fgdModel;
Rect rect;
enum{ NOT_SET = 0 IN_PROCESS = 1 SET = 2 };
uchar rectState = NOT_SET; //矩形框
uchar lblsState = NOT_SET;
vector fgdPxls bgdPxls;
Point p1 p2;
int iterCount;
/*
这个函数的原型应该为 void Foo(int event int x int y int flags void* param);
其中event是 CV_EVENT_*变量之一,
x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系),
flags是CV_EVENT_FLAG的组合,
param是用户定义的传递到cvSetMouseCallback函数调用的参数。
*/
void on_mouse( int event int x int y int flags void* param )
{
switch( event )
{
case CV_EVENT_LBUTTONDOWN: //单击鼠标左键down
{
bool isb = (flags & CV_EVENT_FLAG_ALTKEY) != 0 //是否选中alt键
isf = (flags & CV_EVENT_FLAG_SHIFTKEY) != 0; //是否选中shift键
if( rectState == NOT_SET && !isb && !isf ) //只点击左键时
{
rectState = IN_PROCESS; //正在处理矩形框
p1 = Point(x y); //起点
}
if ( (isb || isf) && rectState == SET ) //选中alt或shift键,并且矩形框已设置
{
lblsState = IN_PROCESS; //正在画背景或前景
}
}
break;
case CV_EVENT_LBUTTONUP: //点击鼠标左键up
if( rectState == IN_PROCESS ) //若是正在处理矩形框时
{
p2 = Point(x y); //终点
rect = Rect( p1 p2 ); //矩形框选中
rectState = SET; //矩形框状态为已设置
gr
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1433 2018-09-16 22:08 CV_grabcut VS2017+OpenCV3.4.3\CV_grabcut.sln
文件 4551 2012-03-22 14:38 CV_grabcut VS2017+OpenCV3.4.3\CV_grabcut.vcproj
文件 10293 2018-09-16 22:00 CV_grabcut VS2017+OpenCV3.4.3\CV_grabcut.vcxproj
文件 932 2018-09-16 21:55 CV_grabcut VS2017+OpenCV3.4.3\CV_grabcut.vcxproj.filters
文件 165 2018-09-16 21:55 CV_grabcut VS2017+OpenCV3.4.3\CV_grabcut.vcxproj.user
文件 6772 2018-09-16 22:01 CV_grabcut VS2017+OpenCV3.4.3\grabcut.cpp
文件 214696 2007-10-01 11:48 CV_grabcut VS2017+OpenCV3.4.3\lena.jpg
文件 30976 2018-09-16 21:55 CV_grabcut VS2017+OpenCV3.4.3\UpgradeLog.htm
目录 0 2018-09-16 22:09 CV_grabcut VS2017+OpenCV3.4.3\x64
目录 0 2018-09-16 22:09 CV_grabcut VS2017+OpenCV3.4.3
----------- --------- ---------- ----- ----
269818 10
相关资源
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- VisualSVN 6.0.4 破解版(支持VS2017)
- Visual Studio 2017企业版 Enterprise,专业版
- VS2017_Professional_15.5.7+密钥
- Microsoft Visual Studio 2017 Installer Project
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- log4cxx Windows vs已配置好的工程
评论
共有 条评论