资源简介
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的三维重建程序
- 2.4.9版本的opencv_createsamples.exe和openc
- opencv.props
- opencv数字识别
- OpenCV人脸识别训练集
- 图像的载入显示和输出程序by浅墨
- 基于视频的运动目标检测
- OpenCV计算图像灰度均值
-
用于Opencv的车牌识别xm
l文件 - opencv3.4.1人脸识别小程序
- OpenCV截取图像的任意区域(ROI)规则
- Opencv灰度变化
- OpenCVForUnity2.2.4
- TensorFlow实现人脸识别(1)------Linux下
- OpenCV中值滤波源代码
- 基于OpenCV的车牌定位
- opencv 头文件以及库文件
- 运动人体的摔倒检测
- Opencv行人检测代码 自带hog检测
- opencv读取usb摄像头和播放视频
- ARM上利用opencv实现人脸识别
- opencv_contrib xfeatures2d boostdesc
- Linux上Qt-OpenCV采集摄像头视频并显示
- OpenCV利用Qt的GUI显示图片
- 基于OpenCV3.2+Qt5.8的basler相机硬件触发
- 基于Opencv的图像分类
- 基于opencv + 多线程的目标跟踪
- 基于OpenCV的多种条形码识别算法
- 智能交通系统 虚拟线圈 车流量检测
- Mastering_OpenCV_第六章车牌识别word版本
评论
共有 条评论