opencv grabCut前景后景分割去除背景

参考:
https://zhuanlan.zhihu.com/p/523954762
https://docs.opencv.org/3.4/d8/d83/tutorial_py_grabcut.html

环境本次:
python 3.10

在这里插入图片描述

提取前景:
1、需要先把前景物体框出来
需要坐标信息,可以用windows自带的画图简单提取像素
在这里插入图片描述

矩形的格式为 (x, y, width, height)

rect = (118, 120, 732, 835)
定义了一个矩形区域,该区域用于初始化 GrabCut 算法。这个矩形区域的参数表示:

118:矩形左上角的 x 坐标。

120:矩形左上角的 y 坐标。

732:矩形的宽度。

835:矩形的高度。

因此,这个矩形从图像的坐标 (118, 120) 开始,宽度为 732 像素,高度为 835 像素。

2、完整代码

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread(r"C:\Users***\long.png")# 创建一个与图像大小相同的掩码
mask = np.zeros(image.shape[:2], np.uint8)# 创建两个数组,用于存储算法内部使用的临时数组
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)# 定义一个矩形区域,该区域包含我们想要分割的前景物体
# 矩形的格式为 (x, y, width, height)
rect = (118, 120, 732, 835)# 应用 GrabCut 算法
cv2.grabCut(image, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)# 创建一个新的掩码,将可能的前景和确定的前景合并
mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')# 将掩码应用于图像
result = image * mask2[:, :, np.newaxis]# 显示原始图像和分割结果
plt.subplot(121), plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
plt.title('Segmented Image'), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

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

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

相关文章

如何合并电脑硬盘分区?轻松合并电脑硬盘分区

在日常使用电脑的过程中,我们有时需要对硬盘进行分区管理。然而,随着时间的推移,我们可能会发现原有的分区设置不再满足需求,这时就需要对分区进行调整,甚至合并分区。那么,我们该如何合并电脑硬盘分区呢&a…

【Vue实战教程】之Vue工程化项目详解

Vue工程化项目 随着多年的发展,前端越来越模块化、组件化、工程化,这是前端发展的大趋势。webpack是目前用于构建前端工程化项目的主流工具之一,也正变得越来越重要。本章节我们来详细讲解一下如何使用webpack搭建Vue工程化项目。 1 使用we…

【数据结构】稀疏数组

问题引导 在编写五子棋程序的时候,有“存盘退出”和“续上盘”的功能。现在我们要把一个棋盘保存起来,容易想到用二维数组的方式把棋盘表示出来,但是由于在数组中很多数值取默认值0,因此记录了很多没有意义的数据。此时我们使用稀…

飞机数据网络--ARINC 664协议

飞机数据网络主要是根据ARINC 664协议规范进行数据的计算,传输转换。然而ARINC 664 英文规范太过复杂,不易理解,即使是专业人员,也需要对其进行抽丝剥茧,结合实际进行理解。本文即从基础角度简单分析一下ARINC 664 应用…

【python学习】思考-如何在PyCharm中编写一个简单的Flask应用示例以及如何用cProfile来对Python代码进行性能分析

引言 Python中有两个流行的Web框架:Django和Flask。Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计;Flask是一个轻量级的Web应用框架,适用于小型到大型应用。以下是使用Flask创建一个简单应用的基本步骤cPro…

【书籍推荐】探索AI大语言模型的基石与边界:《基础与前沿》

本文主要介绍了AI大语言模型的基础与前沿,希望能对学习大模型的同学们有所帮助。 文章目录 1. 前言2. 书籍推荐 2.1 内容简介2.2 本书作者2.3 本书目录2.4 适合读者 1. 前言 全球首个完全自主的 AI 软件工程师上线,它是来自 Cognition 这家初创公司…

上市公司-企业数据要素利用水平(2010-2022年)

企业数据要素利用水平数据:衡量数字化时代企业竞争力的关键指标 在数字化时代,企业对数据的收集、处理、分析和应用能力成为衡量其竞争力和创新能力的重要标准。企业数据要素利用水平的高低直接影响其市场表现和发展潜力。 企业数据要素利用水平的测算…

学习记录——day17 数据结构 队列 链式队列

队列介绍 1、队列也是操作受限的线性表:所有操作只能在端点处进行,其删除和插入必须在不同端进行 2、允许插入操作的一端称为队尾,允许删除操作的一端称为队头 3、特点:先进先出(FIFO) 4、分类: 顺序存储的栈称为顺序栈 链式存储的队列&a…

Spring Boot+WebSocket向前端推送消息

​ 博客主页: 南来_北往 🔥系列专栏:Spring Boot实战 什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许服务器主动向客户端推送信息,同时也能从客户端接收信息。 WebSocket协议诞生于2008年&#…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十七章 字符设备和杂项设备总结回顾

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

springboot旅游规划系统-计算机毕业设计源码60967

摘 要 微信小程序的旅游规划系统设计旨在为用户提供个性化的旅游规划服务,结合Spring Boot框架实现系统的高效开发与部署。该系统利用微信小程序平台,包括用户信息管理、目的地选择、行程规划、路线推荐等功能模块,为用户提供便捷、智能的旅…

英迈中国与 Splashtop 正式达成战略合作协议

2024年7月23日,英迈中国与 Splashtop 正式达成战略合作协议,英迈中国正式成为其在中国区的战略合作伙伴。此次合作将结合 Splashtop 先进的远程桌面控制技术和英迈在技术服务与供应链管理领域的专业优势,为中国地区的用户带来更加安全的远程访…

Python:对常见报错导致的崩溃的处理

Python的注释: mac用cmd/即可 # 注释内容 代码正常运行会报以0退出,如果是1,则表示代码崩溃 age int(input(Age: )) print(age) 如果输入非数字,程序会崩溃,也就是破坏了程序,终止运行 解决方案&#xf…

Java开发之Redis

1、非关系型数据库、快、高并发、功能强大 2、为什么快?内存单线程 非阻塞的IO多路复用有效的数据类型/结构 3、应用:支持缓存、支持事务、持久化、发布订阅模型、Lua脚本 4、数据类型: 5 种基础数据类型:String(字…

html 解决tooltip宽度显示和文本任意位置换行文本显示问题

.el-tooltip__popper {max-width: 480px;white-space: break-spaces; /* 尝试不同的white-space属性值 */word-break:break-all; }

前端文件下载word乱码问题

记录一次word下载乱码问题: 用的请求是axios库,然后用Blob去接收二进制文件 思路:现在的解决办法有以下几种,看看是对应哪种,可以尝试解决 1.将响应类型设为blob,这也是最重要的,如果没有解决…

C#开源、简单易用的Dapper扩展类库 - Dommel

项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dommel 能够根据你的 POCO 实体自动生成相应的 SQL 查询语句。这大大减少了手动编写 SQL 代码的工作量,并提高了代码的可读性和可维护性。 Dommel 支持 LINQ 表达式&#xff…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说,创建一个文件&a…

【Linux】:自定义shell(简易版)

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

虚拟现实和增强现实技术系列—Expressive Talking Avatars

文章目录 1. 概述2. 背景介绍3. 数据集3.1 设计标准3.2 数据采集 4. 方法4.1 概述4.2 架构4.3 目标函数 5. 实验评测5.1 用户研究5.2 我们方法的结果5.3 比较与消融研究 1. 概述 支持远程协作者之间的交互和沟通。然而,明确的表达是出了名的难以创建,主…