当前位置: 首页 > news >正文

使用 OpenCV 和 GrabCut 算法进行交互式背景去除

一、说明

        我想,任何人都可以尝试从图像中删除背景。当然,有大量可用的软件或工具能够做到这一点,但其中一些可能很昂贵。但是,我知道有人使用窗口绘画3D魔术选择或PowerPoint背景去除来删除背景。
        如果您是计算机视觉领域的初学者,这可能适合您。让我们马上开始吧!哦,没有使用太多代码...

二、GrabCut 介绍

        GrabCut 是一种计算机视觉算法,用于从图像中提取对象。因为它并不总是第一次工作,所以交互式GrabCut允许用户指示如何提高输出。在网络上,有几个GrabCut实现;有些只在Python中运行(没有Web界面),而另一些则不是交互式的。

2.1 使用GrabCut的过程是什么?

 1. 用户进入矩形。此矩形之外的所有内容都将被视为背景。矩形内的一切都是一个谜。

2.算法标记前景和背景中的像素(或硬标记)

3. 然后使用高斯混合模型 (GMM) 对前景和背景进行建模。

4. GMM根据我们提供的数据学习并创建新的像素分布。换句话说,未知像素根据它们与其他硬标记像素的颜色统计关系被标记为可能的前景或可能的背景(就像聚类一样)。

5. 此像素分布用于创建图形。像素是图形中的节点。添加了两个新节点:“源”节点和“接收器”节点。每个前景像素都链接到一个源节点。

信用 researchgate.net

2.2 如何使用GrabCut的包

2.2.1 第 1 步:导入必要的包

        首先,我们必须导入必要的包并覆盖我们的 matplotlib 函数。

        代码片段:

import cv2
import dlib
import sys
import numpy as np
from tkinter import filedialog
from matplotlib import pyplot as pltdef imshow(title = "Image", image = None, size = 10):w, h = image.shape[0], image.shape[1]aspect_ratio = w/hplt.figure(figsize=(size * aspect_ratio,size))plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))plt.title(title)plt.show() 

2.2.2 第 2 步:选择投资回报率函数

        我们可以使用此 OpenCV 方法从图片中仔细手动选择我们需要的感兴趣区域。

        原始照片

致谢 Eskipaper.com

img = r"C:\Users\jinzh\Desktop\Project\Python\python-opencv\lovely-girl-background-1.jpg"image = cv2.imread(img)
copy = image.copy()
# Create a mask (of zeros uint8 datatype) that is the same size (width, height) as our original image 
mask = np.zeros(image.shape[:2], np.uint8)bgdModel = np.zeros((1,65), np.float64)
fgdModel = np.zeros((1,65), np.float64)x, y , w, h = cv2.selectROI("select the area", image)start = (x, y)
end = (x + w, y + h)rect = (x, y , w, h)
cv2.rectangle(copy, start, end, (0,0,255), 3)
imshow("Input Image", copy) 

输出

生成自 Jupyter Notebook(作者)

2.2.3 第 3 部分 抓取切割算法算法:

抓取参数

1. img — 输入图像

2. 蒙版 — 这是一个蒙版图像,用于指定哪些部分是背景、前景或可能的背景/前景等。标志cv.GC_BGD、cv.GC_FGD、cv.GC_PR_BGD、cv.GC_PR_FGD,或者只是传递 0,1,2,3 以映像完成此操作。

3. rect — 在格式中,它是包含前景对象 (x,y,w,h) 的矩形的坐标

4. bdgModel 和 fgdModel — 由算法在内部使用。你只需要创建两个 np.float64 类型的零数组,每个数组的大小为 np.float64 (1,65)。

5. iterCount — 算法应运行的迭代次数。

6. mode — 这应该是cv.GC_INIT_WITH_RECT的、cv.GC_INIT_WITH_MASK的或混合的,这取决于我们是在绘制矩形还是画龙点滴。

cv2.grabCut(image, mask, rect, bgdModel, fgdModel, 100, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
image = image * mask2[:,:,np.newaxis]imshow("Mask", mask * 80)
imshow("Mask2", mask2 * 255)
imshow("Image", image) 

解释

1. 运行算法 5 次迭代。因为我们使用的是矩形,所以模式应该是cv.GC_INIT_WITH_RECT的。

2.遮罩图像由Grabcut修改。

3. 如上所述,新蒙版图像中的像素将标有四个标志,表示背景/前景。

4.因此,我们更改了蒙版,使所有0和2像素都设置为0(背景),所有1和3像素都设置为1。(即前景像素)。

5. 我们最后一个面具现在已经完成。要获得分割的图像,只需将其乘以输入图像即可。

输出

生成自 Jupyter Notebook(作者)

你。我们终于能够删除背景。

三、参考和引用

  1. "GrabCut" | ACM SIGGRAPH 2004 Papers
  2. OpenCV: Interactive Foreground Extraction using GrabCut Algorithm

相关文章:

使用 OpenCV 和 GrabCut 算法进行交互式背景去除

一、说明 我想,任何人都可以尝试从图像中删除背景。当然,有大量可用的软件或工具能够做到这一点,但其中一些可能很昂贵。但是,我知道有人使用窗口绘画3D魔术选择或PowerPoint背景去除来删除背景。 如果您是计算机视觉领域的初学者…...

在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制休眠(二)

问题场景 本月7月10日处理了一个虚拟机被强制暂停的问题,详见:在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制暂停当时是由于C盘存储空间不足,导致虚拟机被强制暂停,将虚拟机迁移后,问题…...

sql学习笔记

sql语句优先级 FROM → WHERE → GROUP BY → SELECT → HAVING → ORDER BY sql case用法 例题: 按照销售单价( sale_price )对练习 3.6 中的 product(商品)表中的商品进行如下分类。 低档商品:销售单价在1000日元以下&#x…...

Ubuntu 20.04.4 LTS安装Terminator终端(Linux系统推荐)

Terminator终端可以在一个窗口中创建多个终端,并且可以水平、垂直分割,运行ROS时很方便。 sudo apt install terminator这样安装完成后,使用快捷键Ctrl Alt T打开的就是新安装的terminator终端,可以使用以下方法仍然打开ubuntu默…...

22. 括号生成

题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:["((()))","(()())","(())()","()(())",&…...

WPF实战学习笔记05-首页界面

首页界面 新建文件 添加文件[类型:用户控件] ./Common/Models/TaskBars.cs ./Common/Models/ToDoDto.cs ./Common/Models/MemoDto.cs 新建类 TaskBars.cs using System; using System.Collections.Generic; using System.Linq; using Sy…...

一文带你迅速入门SprIngMVC,看这一篇就足够了!

0. 什么是SpringMVC 要知道什么是SpringMVC,我们首先得知道什么 MVC,MVC是软件工程中的一种架构模式,分为 Model、View、Control。它把软件系统分为模型、视图和控制器三个基本部分。 Model:模型,应用程序负责数据逻…...

js路由跳转时放弃正在pending的请求

在单页面应用中通常会对请求进行catch处理,如果用户打开a页面后页面发出了一个请求去获取aaa,但是由于某种原因请求一直在pending。此时用户又进入了b页面,在浏览时a页面的请求失败了,然后页面弹出提示:“数据aaa请求失…...

LeetCode(sql)-0723

聚合函数 620 select * from cinema where mod(id,2)1 and description <> boring order by rating desc1251 select p.product_id, Round(sum(price*units)/sum(units),2)as average_price from UnitsSold u left join Prices p using(product_id) where purchase_d…...

【C++】开源:grpc远程过程调用(RPC)配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍grpc远程过程调用&#xff08;RPC&#xff09;配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜…...

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时&#xff0c;使用的是spring-cloud微服务构架&#xff0c;mq消息消费模块是单独一个模块&#xff0c;但启动这个模块一直报如下错误&#xff1a; java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错&#xff0c;刚开…...

uni-app 中定时器的使用

学习目标&#xff1a; 学习目标如下所示&#xff1a; uniapp中通过使用uni-app提供的定时器API来实现定时器功能。 学习内容&#xff1a; 内容如下所示&#xff1a; **uni-app的定时器API分为两种&#xff1a; 1.第一种方式&#xff1a; setTimeout函数&#xff0c;用于设置一…...

基于物联网、视频监控与AI视觉技术的智慧电厂项目智能化改造方案

一、项目背景 现阶段&#xff0c;电力行业很多企业都在部署摄像头对电力巡检现场状况进行远程监控&#xff0c;但是存在人工查看费时、疲劳、出现问题无法第一时间发现等管理弊端&#xff0c;而且安全事件主要依靠人工经验判断分析、管控&#xff0c;效率十分低下。 为解决上述…...

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中&#xff0c;大家总是奔波于家和公司之间。大部分时间用于工作中&#xff0c;也就很难及时知晓家中的动态情况&#xff0c;对于家中有老人、小孩或宠物的&#xff08;甚至对居住环境安全不放心的&#xff09;&#xff0c;这已然是…...

【Flume 01】Flume简介、部署、组件

1 Flume简介 Flume是一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统 主要特性&#xff1a; 它有一个简单、灵活的基于流的数据流结构&#xff08;使用Event封装&#xff09;具有负载均衡机制和故障转移机制一个简单可扩展的数据模型(Source、Channel、Sink) Sou…...

三款即时通讯工具推荐:J2L3x、Telegram、WhatsApp 你选哪个?

1、J2L3x J2L3x 是一款受欢迎的即时通讯工具&#xff0c;广泛应用于企业团队之间的沟通和协作。它提供了多种通讯方式&#xff0c;包括群组聊天、私人消息和文件共享等&#xff0c;还可以方便地与其他应用程序和服务集成。即使你不在工作场所&#xff0c;你也可以在任何地方使…...

C++ 单例模式(介绍+实现)

文章目录 一. 设计模式二. 单例模式三. 饿汉模式四. 懒汉模式结束语 一. 设计模式 单例模式是一种设计模式 设计模式(Design Pattern)是一套被反复使用&#xff0c;多数人知晓的&#xff0c;经过分类的&#xff0c;代码设计经验的总结。 为什么要有设计模式 就像人类历史发展会…...

uniapp项目集成本地插件

在项目根目录下创建nativeplugins文件夹 拷贝插件到目录nativeplugins 在manifest.json -> App原生插件配置 -> 本地插件里勾选插件 删除本地基座和手机app从新自定义基座运行...

MFC CList 类的使用

MFC提供CList 类&#xff1b; 类CList支持可按顺序或按值访问的非唯一对象的有序列表&#xff1b;CList 列表与双链接列表行为相似&#xff1b; 类型POSITION的变量是列表的关键字&#xff1b;可使用POSITION变量作为循环因子来顺序遍历列表&#xff0c;作为书签来保存位置&am…...

iptable防火墙

防火墙 防火墙的主要功能是隔离&#xff0c;决定数据是否可以被外网访问以及哪些数据可以进入内。 它主要部署在网络边缘或者主机边缘&#xff0c;应用在网络层。 防火墙的安全技术: 1、入侵检测系统&#xff1a;检测数威胁&#xff0c;病毒&#xff0c;木马&#xff0c;不…...

Python数据库操作终极指南:5分钟快速上手dataset轻松管理数据

Python数据库操作终极指南&#xff1a;5分钟快速上手dataset轻松管理数据 【免费下载链接】dataset Easy-to-use data handling for SQL data stores with support for implicit table creation, bulk loading, and transactions. 项目地址: https://gitcode.com/gh_mirrors/…...

Phi-4-mini-reasoning效果展示:含单位换算、科学计数法的复合型数学题求解

Phi-4-mini-reasoning效果展示&#xff1a;含单位换算、科学计数法的复合型数学题求解 1. 模型能力概览 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型&#xff0c;特别擅长处理需要多步逻辑推导的问题。与通用聊天模型不同&#xff0c;它更专注于"问题输入→…...

为什么需要虚拟摄像头?OBS-VirtualCam 3大核心价值解析

为什么需要虚拟摄像头&#xff1f;OBS-VirtualCam 3大核心价值解析 【免费下载链接】obs-virtual-cam obs-studio plugin to simulate a directshow webcam 项目地址: https://gitcode.com/gh_mirrors/ob/obs-virtual-cam 在视频会议和在线教学中&#xff0c;你是否曾希…...

保姆级教程:用Proteus 8.13和STM32F103C8T6复刻一个烟雾报警器仿真(附源码调试心得)

从零到一&#xff1a;Proteus与STM32烟雾报警器仿真全流程实战指南 第一次打开Proteus时&#xff0c;那个蓝色界面和密密麻麻的元件库让我既兴奋又茫然。作为一个刚接触嵌入式仿真的电子爱好者&#xff0c;我原本以为有了开源文件和代码就能轻松复现一个烟雾报警器仿真项目&…...

QT图形界面开发集成Phi-4-mini-reasoning:打造智能桌面应用

QT图形界面开发集成Phi-4-mini-reasoning&#xff1a;打造智能桌面应用 1. 智能桌面应用的新可能 传统桌面应用开发正在经历一场智能化变革。想象一下&#xff0c;你的QT应用不仅能响应用户操作&#xff0c;还能理解用户意图、自动生成内容、提供智能建议——这就是集成Phi-4…...

TouchGal:3个关键功能让你成为真正的Galgame收藏家

TouchGal&#xff1a;3个关键功能让你成为真正的Galgame收藏家 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 你是否曾为寻找心仪的…...

霜儿-汉服-造相Z-Turbo作品集:看看AI能生成多美的汉服少女图

霜儿-汉服-造相Z-Turbo作品集&#xff1a;看看AI能生成多美的汉服少女图 1. 惊艳开篇&#xff1a;AI汉服艺术的魅力 当传统汉服遇上现代AI技术&#xff0c;会碰撞出怎样的火花&#xff1f;霜儿-汉服-造相Z-Turbo给出了令人惊叹的答案。这个基于Xinference部署的文生图模型服务…...

Phi-4-mini-reasoning部署教程:多模型共存时GPU显存隔离配置技巧

Phi-4-mini-reasoning部署教程&#xff1a;多模型共存时GPU显存隔离配置技巧 1. 模型介绍 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、低延迟&quo…...

从一次系统升级说起:聊聊Android PMS如何管理/system/app下的预装应用

Android PMS深度解析&#xff1a;系统预装应用的管理艺术 1. 系统预装应用的特殊地位 在Android生态系统中&#xff0c;预装应用占据着独特的位置。这些位于/system/app目录下的应用与普通用户应用有着本质区别&#xff1a; 系统级权限&#xff1a;预装应用通常拥有更高的系统权…...

配网接地故障排查效率提升3倍:力兴电子LX6180交流试送仪

作为常年跑野外的配网试验人员&#xff0c;相信大家都遇过10~66kV小电流接地系统单相接地故障的排查难题&#xff1a;传统分段拉闸、登杆巡检的方法&#xff0c;短则两三小时、长则大半天才能锁定故障点&#xff0c;遇上瓷瓶开裂、污潮湿引起的高阻隐性故障&#xff0c;更是容易…...