当前位置:

首页 > 软件教程 > OpenCV Grabcut图像分割教程

OpenCV Grabcut图像分割教程

Windows 11
Windows 11

Windows 11 是微软全新操作系统,现代化界面,流畅操作体验,适用于学习、工作与日常生活。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

立即下载
¥159
Windows 2026-08-22
正版软件 Windows 操作系统 Windows 11 Windows下载

图像分割技术是将图像划分为多个具有独特属性的区域,并从中提取感兴趣目标的过程。它是图像处理向图像分析过渡的关键步骤。目前,图像分割方法主要包括基于阈值的分割、基于区域的分割、基于边缘的分割以及基于特定理论的分割等。从数学角度来看,图像分割是将数字图像划分为互不相交的区域的过程,同时也是一个标记过程,即将同一区域的像素赋予相同的编号。为了解决传统的GrabCut和GraphCut算法需要用户提供精确的前景和背景种子,且种子覆盖不全时分割准确度受影响的问题,微软研究室提出了更为高效的GrabCut分割算法。G

本文目录

    图像分割技术是将图像划分为多个具有独特属性的区域,并从中提取感兴趣目标的过程。它是图像处理向图像分析过渡的关键步骤。目前,图像分割方法主要包括基于阈值的分割、基于区域的分割、基于边缘的分割以及基于特定理论的分割等。从数学角度来看,图像分割是将数字图像划分为互不相交的区域的过程,同时也是一个标记过程,即将同一区域的像素赋予相同的编号。

    为了解决传统的GrabCut和GraphCut算法需要用户提供精确的前景和背景种子,且种子覆盖不全时分割准确度受影响的问题,微软研究室提出了更为高效的GrabCut分割算法。GrabCut算法只需用户提供一个包含前景的矩形区域,矩形外的区域被视为背景。具体步骤如下:

    1. 将矩形外的像素标记为背景,矩形内的像素标记为前景,并使用这些标记来训练背景和前景的高斯混合模型(GMM);
    2. 使用训练好的GMM计算每个像素属于背景或前景的概率,从而计算能量函数中的Data项,Smoothness项的计算方法与GraphCut类似;
    3. 通过优化能量函数获得图像的一个分割结果;
    4. 使用步骤3中的分割结果重新训练前景和背景的GMM;
    5. 重复步骤2、3、4,直到分割结果收敛(不再有显著变化)。

    从上述步骤可以看出,GrabCut是一个通过循环执行来实现EM(期望最大化)算法的过程。由于用户提供的矩形内可能包含部分背景像素,因此初始种子可能不完全准确。然而,GMM模型不需要所有训练数据都正确,即使部分分类错误,也可以通过EM步骤达到正确的最终结果。GrabCut正是利用了GMM的这一特性。不过需要注意的是,GMM存在陷入局部最优解的问题,GrabCut也同样面临这一挑战。

    算法论文的地址为:https://www.microsoft.com/en-us/research/wp-content/uploads/2004/08/siggraph04-grabcut.pdf

    API代码语言为JavaScript,代码运行次数为0。以下是API的代码示例:

    public static void grabCut(Mat img, Mat mask, Rect rect, Mat bgdModel, Mat fgdModel, int iterCount, int mode)

    参数说明如下:

    • 参数一:img,输入的待分割图像,必须是8位三通道图像。
    • 参数二:mask,输入/输出8位单通道掩码图像。像素值及其含义如下:GC_BGD(0)表示明显的背景像素,GC_FGD(1)表示明显的前景像素,GC_PR_BGD(2)表示可能的背景像素,GC_PR_FGD(3)表示可能的前景像素。
    • 参数三:rect,包含细分对象的ROI区域。ROI外的区域被标记为“明显的背景”。当第七个参数mode为GC_INIT_WITH_RECT时,该参数才会被使用。
    • 参数四:bgdModel,前景模型临时对象。处理同一图像时,请勿对其进行修改。
    • 参数五:fgdModel,背景模型临时对象。处理同一图像时,请勿对其进行修改。
    • 参数六:iterCount,迭代次数。可以通过使用mode == GC_INIT_WITH_MASK或mode == GC_EVAL进行进一步调用来完善结果。
    • 参数七:mode,分割模式标志位。标志位值及其含义如下:GC_INIT_WITH_RECT(0)表示使用提供的矩形初始化状态和掩码,之后根据算法进行迭代更新;GC_INIT_WITH_MASK(1)表示使用提供的掩码初始化状态,可以组合使用GC_INIT_WITH_RECT和GC_INIT_WITH_MASK,然后使用GC_BGD自动初始化ROI之外的所有像素;GC_EVAL(2)表示算法应该恢复;GC_EVAL_FREEZE_MODEL(3)表示算法仅在固定模型下运行GrabCut算法(单次迭代)。

    以下是JavaScript代码示例:

    /** 
     * 图像分割 Grabcut 
     * author: yidong 
     * 2020/11/21 
     */
    class GrabcutActivity extends AppCompatActivity {
        private val mBinding: ActivityGrabcutBinding by lazy {
            ActivityGrabcutBinding.inflate(layoutInflater)
        }
        private lateinit var mRgb: Mat
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(mBinding.root)
        val bgr = Utils.loadResource(this, R.drawable.lena)
        mRgb = Mat()
        Imgproc.cvtColor(bgr, mRgb, Imgproc.COLOR_BGR2RGB)
        mBinding.ivLena.showMat(mRgb)
        GlobalScope.launch(Dispatchers.IO) {
            doGrabCut()
        }
    }
    
    private fun doGrabCut() {
        val rectMat = Mat()
        mRgb.copyTo(rectMat)
        val rect = Rect(80, 30, 340, 390)
        Imgproc.rectangle(rectMat, rect, Scalar.all(255.0), 2)
        GlobalScope.launch(Dispatchers.Main) {
            mBinding.ivLena.showMat(rectMat)
        }
        val bgdModel = Mat.zeros(1, 65, CvType.CV_64FC1)
        val fgdModel = Mat.zeros(1, 65, CvType.CV_64FC1)
        val mask = Mat.zeros(mRgb.size(), CvType.CV_8UC1)
        Imgproc.grabCut(mRgb, mask, rect, bgdModel, fgdModel, 5, Imgproc.GC_INIT_WITH_RECT)
        val result = Mat()
        for (i in 0 until mask.rows()) {
            for (j in 0 until mask.cols()) {
                val value = mask.get(i, j)[0].toInt()
                if (value == 1 || value == 3) {
                    mask.put(i, j, 255.0)
                } else {
                    mask.put(i, j, 0.0)
                }
            }
        }
        Core.bitwise_and(mRgb, mRgb, result, mask)
        GlobalScope.launch(Dispatchers.Main) {
            mBinding.ivResult.showMat(result)
        }
    }
    
    override fun onDestroy() {
        mRgb.release()
        super.onDestroy()
    }

    }

    效果图如下:

    Android OpenCV(四十三):图像分割(Grabcut)Android OpenCV(四十三):图像分割(Grabcut)

    源码地址:https://github.com/onlyloveyd/LearningAndroidOpenCV

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 Windows
    相关文章 更多
    开机提示找不到启动设备或Operating System not found
    开机提示找不到启动设备或Operating System not found

    电脑开机提示找不到启动设备?本教程指导你检查硬盘连接、在BIOS中确认Windows Boot Manager启动顺序,并通过Windows恢复环境运行启动修复,快速解决引导问题。

    开机蓝屏并显示错误代码的修复方法
    开机蓝屏并显示错误代码的修复方法

    遇到Windows开机蓝屏?先记录错误代码,进入恢复环境的安全模式,卸载最近的驱动程序或质量更新,重启验证系统是否恢复正常。

    电脑卡在品牌Logo界面或无限重启
    电脑卡在品牌Logo界面或无限重启

    电脑开机卡在Logo界面或陷入重启循环?本文指导你通过移除外设、重置BIOS启动项及运行系统启动修复来解决问题,快速恢复电脑正常引导。

    电脑截图快捷键没反应:检查Fn锁定与驱动冲突
    电脑截图快捷键没反应:检查Fn锁定与驱动冲突

    当Win+Shift+S或PrtSc键失效时,本文指导用户逐步检查键盘Fn锁定状态、更新键盘驱动程序以及排查第三方软件的热键拦截,快速恢复截图功能。

    Windows更新后开机黑屏,进入安全模式卸载补丁或回滚驱动
    Windows更新后开机黑屏,进入安全模式卸载补丁或回滚驱动

    Windows更新后遭遇开机黑屏?本指南详解如何通过自动修复进入Windows恢复环境,在安全模式中卸载导致故障的质量或功能更新,并回滚显示适配器驱动。包含BitLocker密钥备份提醒及系统还原等备选方案,帮助用户快速恢复桌面正常显示。

    电脑蓝屏后怎么紧急重启并保护未保存数据
    电脑蓝屏后怎么紧急重启并保护未保存数据

    本文介绍Windows电脑蓝屏后的正确处理流程:包括记录停止代码、执行安全重启、进入恢复环境进行启动修复或进入安全模式,以及如何在系统不稳定时保护未保存的重要数据。适用于遇到系统崩溃担心数据丢失的用户。

    电脑黑屏只有鼠标光标怎么办
    电脑黑屏只有鼠标光标怎么办

    解决Windows电脑登录后黑屏但鼠标可动的问题,通过任务管理器重启桌面进程或进入安全模式卸载近期安装的冲突软件,快速恢复桌面显示。

    电脑睡眠唤醒后黑屏无法点亮,关闭快速启动并更新显卡驱动
    电脑睡眠唤醒后黑屏无法点亮,关闭快速启动并更新显卡驱动

    电脑睡眠唤醒后黑屏怎么办?本教程指导您通过关闭Windows快速启动功能和更新显卡驱动程序,解决因电源状态保存错误导致的显示信号丢失问题,操作简单,效果立竿见影。

    更新驱动或系统后出现蓝屏的卸载与回滚方法
    更新驱动或系统后出现蓝屏的卸载与回滚方法

    本文指导用户在遭遇Windows蓝屏死机后,如何正确记录错误信息、执行安全重启并进入恢复环境。通过启动修复、安全模式等方法保护未保存文件,并提供后续排查建议,避免因操作不当导致数据丢失或系统损坏。

    Windows12配置要求公布后怎么查电脑能否升级?检查步骤整理
    Windows12配置要求公布后怎么查电脑能否升级?检查步骤整理

    面对Windows12配置要求,别只盯着内存看。本文教你在Win11中准确记录处理器型号、磁盘剩余空间、TPM版本及安全启动状态,建立完整的设备档案,待官方标准明确后快速对照,避免盲目升级或误判兼容性。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?