#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
// 初识化参数
Mat image, gray, mask;
int ffillMode = 1;
int loDiff = 20, upDiff = 20;
int connectivity = 4;
int isColor = true;
bool useMask = false;
int newMaskVal = 255;
// 鼠标响应函数
static void onMouse(int event, int x, int y, int, void*)
{if (event != CV_EVENT_LBUTTONDOWN)return;// floodfill参数设置Point seed = Point(x, y);int lo = ffillMode == 0 ? 0 : loDiff;int up = ffillMode == 0 ? 0 : upDiff;int flags = connectivity + (newMaskVal << 8) +(ffillMode == 1 ? CV_FLOODFILL_FIXED_RANGE : 0);// 颜色分量随机选取int b = (unsigned)theRNG() & 255;int g = (unsigned)theRNG() & 255;int r = (unsigned)theRNG() & 255;Rect ccomp;// 颜色选择Scalar newVal = isColor ? Scalar(b, g, r): Scalar(r*0.299 + g*0.587 + b*0.114);Mat dst = isColor ? image : gray;int area;// 根据标志位选择泛洪填充if (useMask){// 阈值化操作threshold(mask, mask, 1, 128, CV_THRESH_BINARY);area = floodFill(dst, mask, seed, newVal, &ccomp, Scalar(lo, lo, lo),Scalar(up, up, up), flags);imshow("mask", mask);}else{// 泛洪填充area = floodFill(dst, seed, newVal, &ccomp,Scalar(lo, lo, lo),Scalar(up, up, up), flags);}imshow("image", dst);
}
int main()
{cv::Mat srcImage = cv::imread("..\\images\\sea.jpg");if (srcImage.empty())return 0;srcImage.copyTo(image);cvtColor(srcImage, gray, CV_BGR2GRAY);mask.create(srcImage.rows + 2, srcImage.cols + 2, CV_8UC1);// 鼠标响应回调函数namedWindow("image", 0);setMouseCallback("image", onMouse, 0);for (;;){imshow("image", isColor ? image : gray);int c = waitKey(0);if ((c & 255) == 27){cout << "Exiting ...\n";break;}if (c == 'r'){cout << "Original image is restored\n";srcImage.copyTo(image);cvtColor(image, gray, CV_BGR2GRAY);mask = Scalar::all(0);}}return 0;
}

转载:http://blog.csdn.net/zhuwei1988

FloodFill 图像分割相关推荐

  1. 难以置信!一篇文章就梳理清楚了 OpenCV 的知识体系

    本文分享自华为云社区<难以置信!一篇文章就梳理清楚了 Python OpenCV 的知识体系>,原文作者:梦想橡皮擦 地址|https://bbs.huaweicloud.com/blog ...

  2. 树莓派4B--openCV简单教程及人脸识别

    2021SC@SDUSC 1. OpenCV 初识与安装 本部分要了解 OpenCV (Open Source Computer Vision Library)的相关简介,OpenCv 可以运行在多平 ...

  3. OpenCV3学习(7.1)——图像分割之一(漫水填充FloodFill)

    漫水填充算法 漫水填充法是一种用特定的颜色填充算法填充连通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法.基本思想是自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色, ...

  4. opencv(c++)------图像分割(阙值、自适应阙值、grabCut、floodfill、wathershed)

    图像分割 图像分割算法分为:基于阙值的分割方法.基于边缘的分割方法.基于区域的分割方法.基于神经网络的分割方法.基于聚类的分割方法5类. 1. 基于阙值的分割方法 基于阙值的分割方法实质上是利用图像灰 ...

  5. OpenCV3学习(7.2)——图像分割之二(分水岭算法watershed)

    分水岭算法原理 分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭 ...

  6. Mean Shift算法(3)在OpenCV上的实现——图像分割PyrMeanShiftFiltering

    Meanshift不仅可以用于视频跟踪,还可以用于图像分割.Meanshift算法找到空间上颜色分布的峰值,关注于颜色的空间分布:在视频跟踪领域组更关注于在连续帧中通过事件跟踪这些分布. 一般而言一副 ...

  7. mean shift 图像分割(一、二、三)

    https://blog.csdn.net/u011511601/article/details/72843247 MeanShift图像分割算法:大概是将复杂的背景,通过粗化提取整体信息,进而将图像 ...

  8. opencv漫水填充算法floodfill

    定义 : 漫水填充算法是一种用特定颜色填充连通区域,通过设置像素上下限及连通方式来达到不同的连通效果.漫水填充经常用来标记或分离图像的一部分,以便于对其进行进一步的处理和分析.也可以从输入图像获取掩码 ...

  9. OpenCV入门(十)——图像分割技术

    目录 0x01 FloodFill分割 0x02 均值漂移MeanShift 0x03 图割Grabcut 0x04 奇异区域检测 0x05 肤色检测 0x01 FloodFill分割 FloodFi ...

最新文章

  1. 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握
  2. ms sql 聚合事例
  3. 用SVC模型完成对手写数字的分类
  4. hdu-1251(基本字典树)
  5. 对象间的联动——观察者模式
  6. 关于java static 关键字
  7. abb机器人goto指令用法_ABB机器人指令对照---中文
  8. (转)PowerDesigner教程系列(二)概念数据模型
  9. eclipse cdt无法调试_eclipse导入Web项目并且部署到tomcat(超详细)
  10. 用Jenkins自动化搭建测试环境-前奏
  11. 深度学习:波士顿房价预测
  12. 电脑可以开机但是黑屏_铅锤哥:十五种电脑开机黑屏的原因与解决思路
  13. luoguP1594 护卫队
  14. 用Kotlin开发Android的Hello Kotlin!!
  15. MATLAB实现FFT算法
  16. mysql vc运行库_VC++运行库安装
  17. Adobe Reader安装错误150120的解决
  18. 曼联球星普巴来罗!POGMOJI APP即将上市
  19. JAVA跑步计时器app_坚持跑步神器app
  20. 将APP变成黑白的颜色

热门文章

  1. 白盒测试的3中主要方法(cont.)
  2. Python wordcloud库使用说明
  3. math.hypot java_Java之Math类
  4. Chameleon跨端框架——壹个理想主义团队的开源作品
  5. 阿里云移动数据分析服务使用教程
  6. 22.CSS边框与背景【上】
  7. Linux_DNS服务器
  8. java中重载与重写的区别
  9. storm入门教程 第一章 前言[转]
  10. linux启动x不启动桌面,redhat开机不启动桌面登录程序