漫水填充实例详解

本文介绍了漫水填充算法的基本思想,主要用于图像处理,选取与种子点连通的相似颜色区域进行处理。工作流程包括选定种子点,检查颜色并更新周围点,直至检测区域边界。还详细分析了带掩码版本的漫水填充,涉及函数参数、连通性设置及掩膜的作用。
摘要由CSDN通过智能技术生成

思想

漫水填充:就是将与种子点相连接的区域换成特定的颜色,通过设置连通方式或像素的范围可以控制填充的效果。通常是用来标记或分离图像的一部分对其进行处理或分析,或者通过掩码来加速处理过程。可以只处理掩码指定的部分或者对掩码上的区域进行屏蔽不处理。
主要作用就是:选出与种子点连通的且颜色相近的点,对像素点的值进行处理。如果遇到掩码,根据掩码进行处理。
工作流程:

  1. 选定种子点(x,y)
  2. 检查种子点的颜色,如果该点颜色与周围连接点的颜色不相同,则将周围点颜色设置为该点颜色,如果相同则不做处理。但是周围点不一定都会变成和种子点的颜色相同,如果周围连接点在给定的范围内(lodiff - updiff)内或在种子点的象素范围内才会改变颜色。
  3. 检测其他连接点,进行2步骤的处理,直到没有连接点,即到达检测区域边界停止。

实例

下面贴出毛星云的例子,进行详细分析

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>

using namespace std;
using namespace cv;

Mat g_srcImage, g_dstImage, g_grayImage, g_maskImage;       //定义原始图,目标图,灰度图,掩模图(进一步控制那些区域将被填充颜色)
int g_nFillMode = 1;        //漫水填充的模式
int g_nLowDifference = 20, g_nUpDifference = 20;        //负差最大值,正差最大值
int g_nConnectivity = 4;        //表示floodFill函数标识符低8位的连通值,4,只考虑像素水平和垂直方向的连接点
int g_bIsColor = true;      //是否为彩色图的标识符布尔值
bool g_bUseMask = false;        //是否显示掩模窗口的布尔值
int g_nNewMaskVal = 255;        //新的重新绘制的像素值


//鼠标回调函数
static void onMouse(int event, int x, int y, int, void *)
{
    //若鼠标左键没有按下,便返回
    if (event != EVENT_LBUTTONDOWN)
        return;
//调用floodFill函数之前的参数准备
    Point seed = Point(x, y);           //漫水填充的起始点
    int LowDifference = g_nFillMode == 0 ? 0 : g_nLowDifference;    //空范围的漫水填充,此值设为0,否则设为全局的g_nLowDifference
    int UpDifference = g_nFillMode == 0 ? 0 : g_nUpDifference;      
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值