资源简介
Graphcut-源码及实现,基于opencv实现。可直接运行,其中鼠标左右键分别用于选择正、负种子点。
代码片段和文件信息
#include
#include “gcgraphMy.h“
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/imgproc/imgproc.hpp“
#include
using namespace std;
using namespace cv;
/*
This section shows how to use the library to compute
a minimum cut on the following graph :
*/
///////////////////////////////////////////////////
#include
const int nDownSample = 1;
const Scalar RED = Scalar(0 0 255);
const Scalar PINK = Scalar(230 130 255);
const Scalar BLUE = Scalar(255 0 0);
const Scalar LIGHTBLUE = Scalar(255 255 160);
const Scalar GREEN = Scalar(0 255 0);
#define MASK_BG_COLOR 128
#define MASK_FG_COLOR 255
const Scalar FG_MASK_COLOR = Scalar(255 255 255);
const Scalar BG_MASK_COLOR = Scalar(128 128 128);
const int BGD_KEY = CV_EVENT_FLAG_CTRLKEY;
const int FGD_KEY = CV_EVENT_FLAG_SHIFTKEY;
static void getBinMask(const Mat& comMask Mat& 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;
}
static void showImageS2(const Mat& image const string& winName)
{
cvResizeWindow(winName.c_str() image.cols / nDownSample image.rows / nDownSample);
imshow(winName image);
}
class GCApplication
{
public:
enum{ NOT_SET = 0 IN_PROCESS = 1 SET = 2 };
static const int radius = 2;
static const int thickness = -1;
void reset();
void setImageAndWinName(const Mat& _image const string& _winName);
void showImage(int x int y int FgPoint);
void mouseClick(int event int x int y int flags void* param);
void graphConstruct(const Mat& img GCGraphMy& graph);
void estimateSegmentation(GCGraphMy& graph);
int nextIter();
int getIterCount() const { return iterCount; }
void calSeedPHist(const Mat& img const Mat& mask);
private:
void setRectInMask();
void fillSeedToMask(Mat& mask);
void setLblsInMask(int x int y bool isFg);
double calFgdPrioriCost(Vec3b &color);
double calBgdPrioriCost(Vec3b &color);
const string* winName;
const Mat* image;
Mat mask;
Mat imgShowPg;
Mat bgdModel fgdModel;
double FgPHist[3][256];
double BgPHist[3][256];
double gamma;
double lambda;
double beta;
Mat leftW upleftW upW uprightW;
GCGraphMy graphMy;
uchar rectState lblsState prLblsState;
bool isInitialized;
Rect rect;
vector fgdPxls bgdPxls prFgdPxls prBgdPxls;
int iterCount;
};
void GCApplication::reset()
{
if (!mask.empty())
{
mask.setTo(Scalar::all(GC_BGD));
namedWindow(“mask“ 0);
}
bgdPxls.clear(); fgdPxls.clear();
prBgdPxls.clear(); prFgdPxls.clear();
this->im
- 上一篇:手机虚拟示波器
- 下一篇:网易云音乐器.zip
相关资源
- 利用小波变换对图像进行分解和重构
- 利用基于直方图的自适应阈值方法实
- 基于改进PSO算法的最大熵阈值图像分
- lenna.bmp 图像处理 经典图片 bmp lenna图
- 基于Mumford-Shah模型的水平集图像分割
- 几种常用图像处理算法
- 基于交叉熵阈值法的快速迭代算法
- PSO算法的最大熵阈值图像分割
- 基于图像处理的焊点缺陷识别方法的
- 几种图像分割算法在CT 图像分割上的
- 三种方法实现图像的分割含程序源码
- 图像分割+GUI
- 实现图像分割的grabcut代码
- 图像分割的源代码资源
- 分块压缩感知图像处理仿真BCS.rar
- 9个DSP图像处理实验程序图像处理源代
- 三维Otsu图像分割算法
- 基于图像处理的铁轨表面缺陷检测算
- 数字图像处理实验项目_Laboratory Proj
- 图像处理光流法
- 低比特率图像压缩
- Opencv+Tensorflow入门人工智能处理无密完
- HALCON图像处理。识别视野中球的个数
- U-Net:用于生物医学图像分割的卷积网
- 压缩感知人脸识别以及图像处理
- 静脉识别程序
- 改进的细菌觅食优化算法用于双阈值
- opencv图像处理视频
- lena256图像
- 数字图像处理-3.7混合空间增强法-骨骼
评论
共有 条评论