OpenCV(四十):图像分割—漫水填充

news2024/12/23 19:32:14

1.漫水填充原理

        图像分割中的漫水填充(Flood Fill)算法是一种基于区域增长的像素分类方法。其原理是在图像中从种子点开始,逐渐向周围扩展,并根据一定的条件决定是否将相邻的像素归属于同一区域。

漫水填充的基本原理如下:

  • 选择种子点。
  • 以种子点为中心,判断4邻域或者8邻域的像素值与种子点像素值的差值,将差值小于阈值的像素点添加进区域内。
  • 将新加入的像素点作为新的种子点,反复执行Step2,直到没有新的像素点被添加进该区域。

2.漫水填充分割方法函数floodFill() 

int floodFill(InputOutputArray image,

InputOutputArray mask,

Point seedPoint,

Scalar newVal,

CV_OUT Rect* rect = 0,

Scalar loDiff = Scalar(),

Scalar upDiff = Scalar(),

int flags = 4);

参数说明:

  • image:输入输出图像,图像数据类型可以为CV_8U或者CV_32F的单通道或者三通道图像。

  • mask:掩码矩阵,尺寸比如输入图像的宽和高各大2的单通道图像,用于标记漫水填充的区域。

  • seedPoint:种子点。

  • newVal:归入种子点区域内像素点的新像素值。

  • rect:种子点漫水填充区域的最小矩形边界,默认值为0,表示不输出边界。

  • loDiff:添加进种子点区域条件的下界差值,当邻域某像素点的像素值与种子点像素值的差值大于该值时,该像素点被添加进种子点所在的区域。

  • upDiff:添加进种子点区域条件的上界差值,当种子点像素值与邻域某像素点的像素值的差值小于该值时,该像素点被添加进种子点所在的区域。

  • flags:漫水填充方法的操作标志,其由三部分构成,分别表示邻域种类、掩码像素值和填充算法的规则。

返回值:

  • 返回一个整数值,表示实际填充的像素数量。

示例代码:

void floodFill_f(Mat mat){
    // 如果是四通道图像,则要把四通道图像转换成三通道
    Mat image;
    cv::cvtColor(mat, image, cv::COLOR_BGRA2BGR);

    RNG rng(10086);//随机数,用于随机生成像素
    //设置操作标志flags
    int connectivity=4;//连接领域方式
    int  maskVal=255;//掩码图像的数值
    int  flags=connectivity|(maskVal<<8)|FLOODFILL_FIXED_RANGE;//漫水填充操作方式标志
    Rect rect;                     // 输出的填充区域
    //设置与选中像素点的差值
    Scalar loDiff=Scalar (20,20,20);
    Scalar upDiff=Scalar (20,20,20);
    //声明掩摸矩阵变量
    Mat mask=Mat::zeros(image.rows+2,image.cols+2,CV_8UC1);
    ostringstream ss;
    for(int i=0;i<20;i++){
        //随机产生图像中某一像素值
        int py=rng.uniform(0,image.rows-1);
        int px=rng.uniform(0,image.cols-1);
        Point point=Point (px,py);
        //彩色图像中填充的像素值
        Scalar newVal=Scalar (rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));
        //浸水填充函数
        int area= floodFill(image,mask,point,newVal,&rect,loDiff,upDiff,flags);
        //输出像素点和填充的像素数目
        ss<<"像素点x:"<<point.x<<"   y:"<<point.y<<"   填充像素数目"<<area<<endl;
    }
    LOGD("%s",ss.str().c_str());
    //输出填充的图像结果
    imwrite("/sdcard/DCIM/img.png",image);
    imwrite("/sdcard/DCIM/mask.png",mask);
}

输出图像:

掩码图像:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

香港银行开户内地见证流程

香港公司内地见证开户流程&#xff1a; 资料准备——银行进行资料预审——预审通过&#xff0c;预约面谈&#xff08;确定面谈时间以及在内地指定城市的分行进行面谈&#xff09;——携带齐全资料至内地指定城市分行&#xff0c;在当地银行职员的见证下签署资料——面谈通过&a…

python-爬虫-三字代码网站爬取

三字代码 http://www.6qt.net/ 爬取城市、三字代码、所属国家、国家代码、四字代码、机场名称、英文名称、查询次数 import requestsurl http://www.6qt.net/ r requests.get(url) r.encodinggb2312 print(r.text)使用xpath解析&#xff0c;得到城市名 html.fromstring(html…

管理固定资产怎么界定优化

固定资产的管理和利用是至关重要的一环。然而&#xff0c;如何准确地界定和管理这些资产&#xff0c;以实现最大的效益&#xff0c;却是一个需要深思熟虑的问题。本文旨在探讨行政管理中固定资产的界定方法以及如何进行优化管理。  我们需要明确固定资产的概念。固定资产是指…

ABB AV94a控制模块

多功能性&#xff1a; 控制模块通常设计为多功能设备&#xff0c;可以执行各种控制任务&#xff0c;包括监测传感器数据、执行逻辑操作、生成输出信号等。 可编程性&#xff1a; 许多现代控制模块都具有可编程功能&#xff0c;使用户能够根据需要自定义其行为&#xff0c;从而…

深刻理解Java中方法调用的参数传递

Java方法调用的参数传递 首先给结论&#xff1a;Java中均为值传递。 下面通过概念分析代码示例的方式&#xff0c;实现深刻理解值传递的含义&#xff0c;避免死记硬背。 Java的两种数据类型 基本数据类型&#xff0c;比如int&#xff0c;double&#xff0c;boolean等&#x…

flex布局实现 内容区域高度自适应

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、背景说明 对于纵向排列布局&#xff0c;且上中下个个模块都是自动高度。当我们针对中间部分需要自适应高度且进行滚动时&#xff0c;那我们就可以用flex: 1 来处理。 二 、先看效果图 二 、flex布局 <!DO…

如何使用CMD恢复删除的分区?

分区删除后可以恢复吗&#xff1f; 磁盘分区旨在二级存储上创建一个或多个区域&#xff0c;然后你可以单独管理每个区域&#xff0c;这些区域就是分区。因此&#xff0c;对新安装的存储设备进行分区是很重要的环节&#xff0c;只有分区后才可以在这些设备上创建文件并保存数…

unity 使用声网(Agora)实现语音通话

第一步、先申请一个声网账号 [Agora官网链接]&#xff08;https://console.shengwang.cn/&#xff09; 第二步在官网创建项目 &#xff0c;选择无证书模式&#xff0c;证书模式需要tokenh和Appld才能通话 第三步 官网下载SDK 然后导入到unity&#xff0c;也可以直接在unity商店…

云链商城连锁门店新零售O20系统以零售商城

云链商城连锁门店新零售O20系统以零售商城、门店收银、多渠道进销存、客户管理、互动营销、导购助手、多种奖励模式和数据分析等功能&#xff0c;赋能多品牌连锁门店实现线上线下商品、会员、场景的互联互通&#xff0c;助推企业快速实现营销、服务、效率转型升级&#xff0c;为…

可编程交易区块为DeFi机器人提供强大动力

对于选择基金投资的人来说&#xff0c;一个基本指导原则就是寻找那些管理费最低的基金。资本应该是在运转&#xff0c;而不是用于支付费用。同样&#xff0c;Mysten Lab的Capy交易机器人利用可编程交易区块&#xff08;Programmable Transaction Blocks &#xff0c;PTBs&#…

文章生成器在线使用-自动生成文章的工具

大家好啊&#xff0c;今天我要和大家聊聊一个非常热门的话题——在线文章生成器。主要是帮助我们解决写作困扰&#xff0c;节省大量的时间和精力。我也常遇到常为了写一篇好文章而愁眉苦脸呢&#xff0c;我测试过可以帮助我们生成优质的文章&#xff0c;确实让我们的写作变得简…

1. 微信公众号申请加认证

文章目录 微信公众号申请流程指引微信公众号申请流程注册微信公众号申请完成银行卡账号验证 如何查询微信公众号审核通过登录微信公众号平台后&#xff08;如下图&#xff09;致电微信客服热线 微信公众号认证流程指引微信公众号认证流程选择 微信认证/开通选择验证方式。填写微…

运动耳机哪种类型好、最佳运动耳机推荐

很多人都有着运动的习惯&#xff0c;不论是为了解压放松还是为了健身减肥。而运动方式也是多种多样&#xff0c;包括骑行、跑步、游泳等。 作为“运动伴侣”的运动耳机&#xff0c;很多人都不知道该选择哪一款。通常都是建议大家再运动过程中佩戴专业的运动耳机&#xff0c;因为…

【图像处理】怎么让图片背景变透明?怎么改变图片中线条的颜色?在线PS软件

文章目录 前言一、打开图二、背景透明处理三、改变线条颜色总结 前言 我们处理图片将会使用到PS软件&#xff0c;如果安装了PS那直接打开使用。 如果没有安装PS&#xff0c;可使用在线PS软件&#xff1a; https://www.uupoop.com/#/ 一、打开图 第一步&#xff0c;从这个入口…

线性矩阵不等式(LMI)在控制理论中的应用

目录 &#xff08;一&#xff09;Matlab中的LMI处理工具包 &#xff08;二&#xff09;为什么LMI成为控制理论领域重要工具&#xff1f; &#xff08;三&#xff09;LMI在与Lyapunov不等式的关系 &#xff08;1&#xff09;线性矩阵不等式 &#xff08;2&#xff09;线性矩阵…

如何进行有效测试?——基于MEAP诞生的软件测试实用指南告诉你

近年来出现了一 些新的出版方式&#xff0c;MEAP(Manning Early Access Program)就是其中的一种&#xff0c;把开源运动扩展到出版行业。在MEAP中&#xff0c;读者可在图书出版前逐章阅读早期版本。在作者写作过程中&#xff0c;读者可以及时提供反馈&#xff0c;帮助作者写出更…

苹果发布会,华为成热搜第一?

文 | 琥珀消研社 作者 | April叶 琥珀消研社快评&#xff1a;雷蒙多给华为手机“代言”后&#xff0c;苹果库克又给华为“代言”了&#xff0c;苹果发布会当晚&#xff0c;华为竟然登顶热搜第一#苹果发布会 #华为 #Mate 60 Pro#手机#科技 苹果开发布会&#xff0c;华为却冲上…

Matplotlib | 高阶绘图案例【3】- 五大战区高校排名

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. 数据处理2.1 高效数据2.2 学校排名 &#x1f3f3;️‍&#x1f308; 3. 绘图3.1 绘制图布&#xff0c;设置极坐标系3.2 绘制学校排名柱状图3.3 绘制五大战区扇形区域3.4 添加战区、学校…

javaSE___语法基础(关键字、标识符、数据类型、字符、字符串、运算符)

语法基础 一、关键字的概述和使用二、标识符的概述和组成规则三、标识符中常见的命名规则四、数据类型的概述和分类五、数据类型的概述和分类六、数据类型转换之强制转换七、数据类型转换之强制转换超出范围八、字符和字符串参与运算九、算术运算符的基本用法十、算术运算符和-…

闭包的理解

1.什么是闭包&#xff1f; 变量的私有化。一个函数内的变量,随着函数的执行完毕,对于的变量也会随着销毁,闭包可以让变量在函数执行完毕之后不必销毁,通常将这个变量通过匿名函数的形式return出去,这个变量只能被访问,不能被修改。 2.证明变量执行玩被销毁 (1)函数体没有被包…