opencv-GrabCut 图像分割算法

news2024/10/5 13:03:49

GrabCut 是一种图像分割算法,通过迭代优化的方式将图像分割为前景和背景。这种算法最初由Carsten Rother、Vladimir Kolmogorov和Andrew Blake于2004年提出。

GrabCut 算法的基本思想是通过用户**提供的一个矩形区域(称为"掩模")**来估计前景和背景的分布,然后根据这个估计进行图像分割。在迭代过程中,算法不断优化前景和背景的分布,直到达到收敛。

在 OpenCV 中,可以使用 cv2.grabCut 函数来应用 GrabCut 算法。基本语法如下:

cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount[, mode])

参数说明:

  • img: 输入的图像,是一个三通道的彩色图像
  • mask: 掩模图像,用于初始化 GrabCut 算法。它是一个单通道的图像,其中包含0、1、2、3四个取值。0表示未知区域,1表示背景,2表示前景,3表示确定的前景。
  • rect: 包含前景的矩形区域。
  • bgdModelfgdModel: 这两个参数是 GrabCut 内部用于存储背景和前景的模型,需要传递两个包含指定大小的 NumPy 数组。
  • iterCount: 迭代次数。
  • mode (可选): 指定算法运行的模式。可以是 cv2.GC_INIT_WITH_RECT(使用矩形区域初始化)或 cv2.GC_INIT_WITH_MASK(使用掩模初始化)。

以下是一个简单的示例,演示如何使用 GrabCut 算法对图像进行分割:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg")
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 创建一个与图像大小相同的掩模,将其初始化为背景
mask = np.zeros(img.shape[:2], np.uint8)

# 定义一个矩形区域,包含前景
rect = (50, 50, 450, 350)

# 使用 GrabCut 算法进行图像分割
cv2.grabCut(img, mask, rect, None, None, 5, cv2.GC_INIT_WITH_RECT)

# 将掩模中前景和可能的前景设置为1,背景和可能的背景设置为0
mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')

# 将原始图像与掩模相乘,去除背景
result = img * mask2[:, :, np.newaxis]

# 显示原图、掩模和分割结果
plt.figure(figsize=(12, 4))

plt.subplot(131), plt.imshow(img_rgb)
plt.title('Original Image'), plt.axis('off')

plt.subplot(132), plt.imshow(mask, cmap='gray')
plt.title('Mask'), plt.axis('off')

plt.subplot(133), plt.imshow(result)
plt.title('Segmentation Result'), plt.axis('off')

plt.show()

在这里插入图片描述

在这个示例中,我们首先读取了一幅图像,并创建了一个掩模,将其初始化为背景。然后,定义一个矩形区域,包含前景。接着,使用 cv2.grabCut 函数对图像进行分割。最后,通过将原始图像与二值化的掩模相乘,得到图像的分割结果。 Matplotlib 被用于显示原图、掩模和分割结果。 GrabCut 算法通常需要用户提供一个矩形或者初始的掩模,以帮助算法进行分割。

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

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

相关文章

【C++】:多态

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关多态的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结…

MFC所有控件介绍及基本使用

一、前言 本篇文档介绍了MFC控件的基本使用,同时提供了关于MFC控件使用的工程代码,程序界面如下图,有兴趣的可以到文档最后的链接处进行下载。 二、控件介绍 2.1 Button (按钮) 2.2 CheckBox(复选框&am…

【算法】链表-20231124

这里写目录标题 一、83. 删除排序链表中的重复元素二、206. 反转链表三、234. 回文链表 一、83. 删除排序链表中的重复元素 简单 1.1K 相关企业 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例…

Android相机性能提高50%

文章目录 应用举例(可以不看这一part,直接跳过看具体怎么做):Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**Camera2 扩展 API 可以访问高级功能更多设备上的更多机会 正文:开始使用扩展架…

甄知燕千云ITAM,您的IT资产管理专家

IT 资产是实现企业持续发展的重要资源之一,也是反观企业数字化转型发展的缩影。通常情况下,IT 资产指组织拥有、租赁或使用的任何信息技术设备和资源,这些设备和资源对组织的业务运行起到支持作用。包括硬件设备(如服务器、计算机…

Rust语言入门教程(一) - 简介及Cargo使用

Rust编程入门 为什么学习Rust 我本人是一个DevOps工程师,并不是专职的开发人员,但需要了解各种各样的语言的基本知识和特性,以便在不同的项目中帮助开发人员设计软件架构,部署流程以及进行错误排查和调试。但是对任何新生的优秀…

大语言模型概述(三):基于亚马逊云科技的研究分析与实践

上期介绍了基于亚马逊云科技的大语言模型相关研究方向,以及大语言模型的训练和构建优化。本期将介绍大语言模型训练在亚马逊云科技上的最佳实践。 大语言模型训练在亚马逊云科技上的最佳实践 本章节内容,将重点关注大语言模型在亚马逊云科技上的最佳训…

数据结构算法-贪心算法

引言 贪心:人只要有 “需求“ ,都会有有点“贪“, 这种“贪“是一种选择,或者“”取舍“ RTS(即时战略)游戏: 帝国时代里 首先确保拥有足够的人口 足够的粮食,足够的战略资源 足够的…

VMware vShere download

VMware 前言 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 vSphere 的两个核心组件是 ESXi 和 vCenter Ser…

前端必学——实现电商图片放大镜效果(附代码)

放大镜可以说是前端人必须学会的程序之一,今天的案例为大家展示一下怎么实现放大镜的效果! 效果图展示 整个效果就是当鼠标放到展示图上的时候,会出现一个遮罩层以及弹出来一个框展示一个详情图,并且鼠标移动的时候详情图跟着移动&#xff0c…

老外对开发信的评价是什么?如何写开发信?

老外对开发信的评价和态度怎么样?国外客户喜欢的开发信类型有哪些? 许多中国公司和个人都在与老外打交道时,不可避免地需要发送开发信。但是,老外对开发信的评价究竟如何呢?在这篇文章中,蜂邮将深入探讨老…

【代码可视化实践】代码变更影响分析 | 京东云技术团队

1.前言 笔者前文“浅析代码可视化”中讲述了代码可视化的基本实现原理,并给出了一些业界的应用场景。由于涉及原理和技术范围较广,以笔者能力难以做到面面俱到,为了减少信息传递偏差,便给出了一些信息来源供读者深入阅读。不过针…

css图片缩放属性object-fit说明

object-fit 属性可以设置以下值: 属性值说明例子fill填充容器,可能会改变图片的比例。object-fit: fill;contain保持图片的原始比例,确保图片完全包含在容器内。object-fit: contain;cover保持图片的原始比例,确保图片覆盖整个容…

微信小程序开发资源汇总

本文收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。本文不是一篇关于如何学习微信小程序的入门指南,也非参考手册,只是一些资料的整理。 本仓库中的资料整理自网络,也有一些来自网友的推荐。 官方文档 小程序设计指南…

【超详细】手搓一个微信日记本

🎀 文章作者:二土电子 🌸 关注公众号获取更多资料! 🐸 期待大家一起学习交流! 这里对之前的微信记事本小程序进行了重新编写,增加了更加详细的步骤描述,将全部图片都改成了本地图…

文心一言 VS 讯飞星火 VS chatgpt (142)-- 算法导论12.1 2题

二、用go语言,二叉搜索树性质与最小堆性质(见 6.1 节)之间有什么不同?能使用最小堆性质在 O(n)时间内按序输出一棵有 n 个结点树的关键字吗?可以的话,请说明如何做,否则解释理由。 文心一言: 在二叉搜索树(Binary …

openEuler 22.03 LTS x86_64 cephadm 部署ceph18.2.0 未完成 笔记

环境 准备三台虚拟机 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下载cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

6 个有效且可用的顶级 Android 数据恢复工具

经过测试 42 种数据恢复软件产品,发现奇客数据恢复安卓版是 Android 设备的最佳选择。 过去几十年来,我一直在科技行业工作,经常帮助人们应对计算机灾难,包括丢失数据。 Android 数据恢复应用程序不在您的设备上运行&#xff0c…

教育+AIGC开局之年:教育派作业帮、科技派科大讯飞同路不同道

配图来自Canva可画 与往年相比,今年的双11显得格外冷清,GMV(商品交易总额)数据和增长数据无人提及,京东、淘宝天猫、抖音、快手等平台的火药味都淡了。一片祥和有序的双11氛围中,昔日的K12教育企业与科技企…