30-GrabCut与FloodFill(EmguCV学习)

Emgucv不完整图像分割试验(十八)——非标GLCM(C#版本) 图像切割无外乎用颜色(rgb,hsv等)形状(凹点,凸包,各种矩)区分, 纹理也很多,常用GLCM灰度共生矩阵,欺负人,又是opencv版本有,适合C#版本的没有, 即便有,也大多是基于标准矩形的,但实际应用的时候,我们往往要分析不规则图形。 本来想做个mask图像后,把灰度0-0(意思是某像素为0,该左侧的像素也为零,具体参考GLCM)剔除就行了,后来想想不对,万一图像内部也有0-0的像素... 阅读详情

文章目录

总结

1、Grabcuts算法: 是Graphcuts算法的改进,用于用户导向的图像分割,具有较好的分割效果;Grabcuts算法的改进:①使用高斯混合代替Graphcuts中的直方图模型,使算法可以用于彩色图像;②通过迭代方法解决了能量函数最小化的问题,提供了一个更高的全局结果,赋予用户提供的标记更大的灵活性;
2、Grabcuts算法允许调用者只在待分割对象周围提供一个矩形框,矩形框的外部属于背景,并没有指定前景;(Grabcuts算法具有较好的分割性,但运行时间较长);
3、grabCut()函数中:
参数mas中每一个像素最好赋值,赋值范围只能为:0,1,2,3;背景色为0;
参数mode控制使用矩形初始化Grab,还是使用mask初始化Grab;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、漫水填充算法:floodfill():
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.CV.Util;
using System.Drawing;

namespace lesson30
{
    class Program
    {
        static void Main(string[] args)
        {
            ///使用Rectangle初始化Grab进行图像分割
            ////Mat src = CvInvoke.Imread("2.bmp");
            //Mat src = CvInvoke.Imread("bird.jpg");
            //Mat mask = new Mat();
            //Mat bgModel = new Mat();
            //Mat fgModel = new Mat();
            //Rectangle rect = new Rectangle(78, 69, 406, 332);
            ////Rectangle rect = new Rectangle(223, 123, 308, 356);
            //CvInvoke.GrabCut(src, mask, rect, bgModel, fgModel, 5,
            //                GrabcutInitType.InitWithRect);  //GrabCut 算法进行图像分割
            //CvInvoke.Rectangle(src, rect, new MCvScalar(0, 0, 255), 2);
            //CvInvoke.Imshow("input", src);
            //CvInvoke.Imshow("grab", mask);
            //Mat prFGD = new Mat(src.Size, DepthType.Cv8U, 1);
            //prFGD.SetTo(new MCvScalar(3));  //属于前景的像素
            //Mat mask1 = new Mat();
            //CvInvoke.Compare(mask, prFGD, mask1, CmpType.Equal);   //提取前景像素的掩膜

            //Mat dst = new Mat();
            //src.CopyTo(dst, mask1);
            //CvInvoke.Imshow("result", dst);        
            //CvInvoke.WaitKey(0);

            ///使用mask初始化GrabCut进行分割
            //Mat src = CvInvoke.Imread("bird.jpg");
            //CvInvoke.Imshow("input", src);
            //Mat mask = new Mat(src.Size, DepthType.Cv8U, 1);            
            //mask.SetTo(new MCvScalar(0));   //这一步必须有:将所有像素值设为0:表示均为背景
            ////设置掩膜
            //Rectangle rect = new Rectangle(78, 69, 406, 332);
            //Mat roi = new Mat(mask, rect);
            //roi.SetTo(new MCvScalar(3));    //注意这里掩膜值必须在0、1、2、3之间选取

            //Mat fgModel = new Mat();
            //Mat bgModel = new Mat();
            ////使用Mask掩分割图像
            //CvInvoke.GrabCut(src, mask, new Rectangle(), bgModel, fgModel, 3, GrabcutInitType.InitWithMask);

            //Mat prFGD = new Mat(src.Size, DepthType.Cv8U, 1);
            //prFGD.SetTo(new MCvScalar(3));
            //Mat mask_dst = new Mat();
            //CvInvoke.Compare(mask, prFGD, mask_dst, CmpType.Equal);     //像素值比较

            //Mat dst = new Mat();
            //src.CopyTo(dst, mask_dst);
            //CvInvoke.Imshow("result", dst);
            //CvInvoke.WaitKey(0);

            ///漫水填充算法
            Mat src = CvInvoke.Imread("2.bmp");
            CvInvoke.Imshow("input", src);

            Rectangle rect = new Rectangle();
            Mat mask = new Mat();
            //漫水填充
            CvInvoke.FloodFill(src, mask, new Point(100, 100), new MCvScalar(255, 0, 255), out rect, new MCvScalar(5, 5, 5),
                               new MCvScalar(5, 5, 5));
            CvInvoke.Circle(src, new Point(100, 100), 5, new MCvScalar(0, 255, 0), -1);
            CvInvoke.Imshow("result", src);
            CvInvoke.WaitKey(0);
        }
    }
}

效果

1、Grabcut算法,迭代次数:12(计算时间稍长)
在这里插入图片描述
2、Grabcut算法,迭代次数:5

在这里插入图片描述
3、提取背景:

在这里插入图片描述
在这里插入图片描述

4、漫水填充:
在这里插入图片描述

Emgucv不完整图像分割试验(十三)——颗粒计数 当初入手图像处理是想做个数粒宝,花了两年多时间都没做的太好,失败原因总结如下: 1.当年成像设备选的太差,分辨率太低导致粘连的缝隙太模糊 2.Emgucv也好,图像处理也好,太多的知识点有盲区 好在这次做了一个数子弹的,把之前坑终于补上了。图像处理尤其图像切割这块已经打通,在此将多年心得总结。 N多基本的Emgucv的说明,我这出了本书,没上架,需要的直接QQ联系(273651820),纸... 阅读详情

相关推荐

Emgucv不完整图像分割试验(一)——Emgucv下摄像头调用,c#下listview的用法

总体目标是做个一个各类图像预处理的合集,方便自己理解函数。首先第一个问题就是图像获取,原先一直用Afroge的摄像头获取(理由是能看到设备名称),但这次反正是自己用,就直接Emgucv用了。还是无力吐槽,好端端的Capture改什么VideoCapture。 private void OpenCapture_Click(object sender, EventArgs e) { ...

qq_26996385的博客 1074

图像分割GrabCut

转自:http://blog.youkuaiyun.com/sunyuzhe/article/details/12976261 正文: OpenCV ( EmguCV ) 2.1 新特性介绍之 图像分割 GrabCut ( GrabCut of OpenCV 2.1 ) 作者:王先荣     前不久OpenCV和EmguCV相继发布了2.1版,增加了一些新的特性,本文关注的是其

火狐星星的专栏 2814

emgucv4学习16---GrabCut算法

EmguCV中的GrabCut算法是Graphcut算法的改进, Graphcut是一种直接基于图割算法的图像分割技术, 仅仅需要确认前景和背景输入, 该算法就可以完成前景和背景的最优分割, 算法依据《“GrabCut” - Interactive Foreground Extraction using Iterated Graph Cuts》这篇文章来实现的。该算法利用了图像中的纹理(颜色)信息和边界(反差)信息, 只要少量的用户交互操作即可得到比较好的分割结果, 和分水岭算法比较相似, ...

qianxun 469

emgucv4学习20---emgucv+yolov4目标检测+vs2019

前面我们学习了emgucv+yolov3目标检测,现在开始学习emgucv+yolov4的相关学习。 先介绍下emgucv. Emgu CV 是.NET 平台下对 OpenCV 图像处理库的封装。也就是 OpenCV 的.NET 版。它运行在.NET 兼容的编程语言下调用 OpenCV 的函数,如 C#、VB、 VC++等。同时这个封装库可以在 Mono 下编译和在 Linux / Mac OS X 上运行。 Emgu Cv 的优势在于.net 非常完美的界面,给用户操作带来非常直观的感觉。 Emgu

qianxun 1414

emgucv4学习3---图像基本操作

前面学习了emgucv得安装以及图像类型转换得学习,接下来开始图像基本操作得学习。 1、读取图片; Image<Bgr, byte> image = new Image<Bgr, byte>("G:\\Emgucv_Project\\image\\dog.jpg"); pictureBox1.Image = image.ToBitmap(); 也可以使用openFileDialog来选择打开得图像,代码如下: OpenFileDialog openFileDial

qianxun 1035

opencv--GrabCut

opencv--GrabCut

qq_41803556的博客 466

用Python+NumPy手把手实现分数阶傅里叶变换(FRFT),搞定线性调频信号分析

本文详细介绍了如何使用Python和NumPy实现分数阶傅里叶变换(FRFT),特别针对线性调频信号(Chirp信号)分析。通过从零开始的代码实现和可视化案例,展示了FRFT在时变信号处理中的强大能力,帮助工程师和研究人员高效分析频率随时间变化的信号。

weixin_29062823的博客 217

OpenCV4图像处理-图像交互式分割-GrabCut

GrabCut交互式图片分割实战代码

羊羊羊 1718

CKEditor5富文本编辑器 - 视频引入、预览及自定义toolbar

文章目录定义遇到的问题视频部分引入媒体url失败原因解决方法:自定义视频provider视频预览及页面不显示视频问题解决方案:H5 \标签如何移除toolbar中的部分插件 一个小后端很少接触前端框架,只能在知识的海洋中漂泊。。。 定义 <script src="https://cdn.ckeditor.com/ckeditor5/16.0.0/classic/ckeditor.js"&gt...

huhui806的博客 8196

ESP32脑机接口开发板:EEG信号采集与应用开发指南

脑机接口(BCI)技术通过采集脑电图(EEG)信号实现人机交互,其核心在于高精度生物电信号采集与实时处理。基于ESP32微控制器的开发平台结合专业级ADS1299 ADC芯片,可构建8通道EEG信号采集系统,支持250SPS采样率与可编程增益。这种嵌入式解决方案在科研教育领域具有显著优势,既能满足信号质量要求,又大幅降低开发门槛。典型应用包括实时脑电波可视化、注意力检测等BCI场景,通过Python生态工具链(如BrainFlow、LSL)可快速实现数据处理。开发时需注意电极阻抗控制(<10kΩ)和50/6

weixin_42518874的博客 343

Emgu CV3+C#图像处理(四):使用EmguCV获取摄像头、读取视频

首先按(一)中的操作配置EmguCV,并添加系统动态链接库中的 “System.Windows.Forms.dll”。 示例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Win...

akadiao的博客 1万+

HFSS实战项目——高带外抑制特性SIW带通滤波器

本文对单级滤波器和双级滤波器的设计、工作原理及仿真结果进行了详细分析,并验证了双级SIW带通滤波器在性能方面的优越性,为微波通信系统中滤波器的设计和应用提供了重要参考。

2401_87464239的博客 1812

使用EmguCV进行图像修复

图像修复是重建图像和视频受损部分的过程。这个过程也称为图像或视频的插值。 在EmguCV中,不仅可以修复划痕,还可以去除文本或对象,修复图像可以用 Inpaint函数。参数和用法如下 public static void Inpaint( IInputArray src, IInputArray mask, IOutputArray dst, double inpaintRadius...

任玉腾的博客 1357

OpenClaw实战系列04:Jira/Confluence深度集成实战指南

汇总 Confluence 空间 TEAM 下所有关于“性能优化”的文档,输出要点自然语言创建和查询 Jira 任务,无需离开聊天工具基于 Confluence 的私有知识库问答,让 AI 真正理解团队文档Jira 与 Confluence 联动,打通项目管理与知识管理定时同步与通知,自动化团队信息流转至此,你的 OpenClaw AI 助理已经不仅是一个聊天机器人,而是真正融入团队工作流的“智能项目管理助手”。下一期我们将带来OpenClaw 自定义技能开发实战。

PeterPan的博客 572

流量PID控制(开度前馈量计算+辅助PID)

PLC通过伯努利方程近似计算水箱流量(FC)-优快云博客文章浏览阅读1.6k次。本文介绍了如何使用PLC通过伯努利方程近似计算水箱中的液体流量,主要涉及流量计算、模型验证、梯形图编程及STL代码实现。适合自动化领域的学习者参考。单容双容水箱建模(simulink仿真+PLC代码)_水箱系统的建模方法-优快云博客文章浏览阅读2k次。该博客介绍了如何使用伯努利方程建立单容和双容水箱模型,详细阐述了从理论建模到PLC编程的实现过程。

RXXW_Dor的博客 845

EMGU.CV入门(四、图片运算)

一、图像的加减乘除 // 1. 加载原图1 var image1 = new Image<Bgr, byte>("bird1.png"); PreviewImage1 = new WriteableBitmap(Bitmap2BitmapImage(image1.Bitmap)); // 2. 加载原图2 var image2 = new Image<Bgr, byte>("bird2.png"); PreviewImage2 =

LyRics1996的博客 1492

【ComfyUI】多模型 户型图风格渲染效果图

本文介绍了一种基于ComfyUI的室内户型图自动渲染工作流,将平面图转换为风格化效果图。该工作流通过RH_Captioner节点识别空间布局,结合Qwen2.5模型优化文本描述,再使用定制室内设计模型生成渲染图。整个流程包含图像输入、空间识别、文本组织、语言生成、风格转换和渲染输出等9个阶段,各节点协同完成从户型图到效果图的全自动转换。系统融合了语言理解和图像生成技术,可广泛应用于室内设计、装修可视化等领域。

Mr数据杨 3007

Emgucv不完整图像分割试验(九)——运动追踪

越来越懒了,反正就是几个模型的using的库微微的有一点不一样,自己官网搜搜。 BackgroundSubtractorMOG2 bg_mog = null;//随便什么模型,大概有4个老的2个新的,都一样的写法。 Mat scr = new Mat();//更新输入图像。 Mat mask = new Mat();//运动检测输出图像。 ...

qq_26996385的博客 888

对CryptoDriver里密钥格式定义的探索(1)

一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。

认真搞搞汽车MCU 527

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

图像分割-Grabcut法

GrabCut是一种基于图像分割的技术,它可以用于将图像中的前景和背景分离。在实现中,GrabCut算法通常需要使用高斯混合模型(GMM)来建立前景和背景的概率分布,以便更好的估计像素的标签。同时,还需要考虑如何处理边界处的像素,以避免边界处的像素被错误地分类。GrabCut算法在图像分割中有着广泛的应用,例如人像分割、物体抠图等。该方法没有返回值,而是直接在mask图像上进行前景分割操作,最终获得的mask包含0-3的值,含义如参数中说明。很相似,本文也可以为C#爱好者提供参考。

学习微软 .net 技术开发 1235

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

emgucv 抠图

我的环境的KinectSDK2.0+EmguCV3.0.0 依旧还是WinFrom和ImageBox 因为需要用到BodyIndex的数据,但BodyIndex的分辨率和RGB图像的分辨率不同,所以需要用的CoordinateMap类中的坐标转换函数。 然后直接对colorimage的像素点进行操作。 同样,需要用的指针,要把项目调整为允许不安全的代码。 代码和注释如

u012750277的博客 2119

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OpenCV学习10 用GrabCut算法分割图像

【代码】OpenCV学习10 用GrabCut算法分割图像。

weixin_45824067的博客 349

EmguCV 常用函数功能说明

AbsDiff,计算两个数组之间的绝对差。 dst(I)c = abs(src1(I)c-src2(I)c)。所有数组必须具有相同的数据类型和相同的大小(或ROI大小)。 累加,将整个图像或其所选区域添加到累加器和。 累积产品,将2张图像或其选定区域的产品添加到累加器中。 AccumulateSquare,将输入src或其选定的区域,增加到功率2,添加到累加器sqsum。 累积权重,计算输

被遗忘的遐想空间 1万+

emgucv 漫水填充 cvFloodFill

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; u

911的专栏 4994

抠图应用程序设计(一)——GrabCut算法的实现

简介 ​ GrabCut是一种基于Graph Cut的图像分割算法,从待分割的对象周围用户指定的边界框开始,使用高斯混合模型估计目标对象和背景的颜色分布。在像素标签上构造马尔可夫随机场,其能量函数优先选择具有相同标签的连接区域,并不断优化迭代求取最优解,GrabCut的用户操作和效果如下: Graph Cut算法 ​ Graph Cut算法是一种能量优化算法,广泛应用于计算机视觉领域中的前背景分割、立体视觉、抠图技术等。该方法把图像分割问题和图的最小化分割问题关联起来,通过计算对无向图的分割完成图像分割操

Rosen的博客 4058
上一篇: 29-分水岭算法与图像修补(EmguCV学习)
下一篇: Harris角点检测原理详解(转载)
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值