如何在Python中删除图像的背景

2024-04-25

我有一个包含全角人类图像的数据集,我想删除这些图像中的所有背景,只留下全角人物,

我的问题:

有没有Python代码可以做到这一点?

我是否需要每次都指定人员对象的坐标?


这是使用 Python/OpenCV 的一种方法。

  • 读取输入
  • 转换为灰色
  • 阈值和反转作为掩模
  • 可选择应用形态学来清理任何无关的斑点
  • 边缘抗锯齿
  • 将输入的副本转换为 BGRA 并插入遮罩作为 Alpha 通道
  • 保存结果

Input:

import cv2
import numpy as np

# load image
img = cv2.imread('person.png')

# convert to graky
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold input image as mask
mask = cv2.threshold(gray, 250, 255, cv2.THRESH_BINARY)[1]

# negate mask
mask = 255 - mask

# apply morphology to remove isolated extraneous noise
# use borderconstant of black since foreground touches the edges
kernel = np.ones((3,3), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# anti-alias the mask -- blur then stretch
# blur alpha channel
mask = cv2.GaussianBlur(mask, (0,0), sigmaX=2, sigmaY=2, borderType = cv2.BORDER_DEFAULT)

# linear stretch so that 127.5 goes to 0, but 255 stays 255
mask = (2*(mask.astype(np.float32))-255.0).clip(0,255).astype(np.uint8)

# put mask into alpha channel
result = img.copy()
result = cv2.cvtColor(result, cv2.COLOR_BGR2BGRA)
result[:, :, 3] = mask

# save resulting masked image
cv2.imwrite('person_transp_bckgrnd.png', result)

# display result, though it won't show transparency
cv2.imshow("INPUT", img)
cv2.imshow("GRAY", gray)
cv2.imshow("MASK", mask)
cv2.imshow("RESULT", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

透明结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中删除图像的背景 的相关文章

随机推荐

  • 如何使用 KnpMenuBundle 和 Symfony3 排除某些字符串出现在缺失的翻译中

    介绍 在我的个人项目中我使用 XAMPP 与 PHPv7 1 6 Symfony v3 3 8 Knp菜单包dev master 2 2 x dev dev版本 因为它与当前版本兼容Symfony 3 3 x版本 早期版本未通过安装comp
  • URL 对 URL 中的点 (.) 进行编码?

    目前我正在 symfony 中编写一个小代码 这将导致 url 具有如下资源 http url val abc abxhd 我能够成功地获取参数 abchttp url val abc 但是当我尝试运行以下 URL 时http url va
  • 如何使图像弯曲到其宽度?

    如何防止图像被拉伸超过其自然 200 像素宽度 footer display flex img flex 1 margin 1em
  • 简单的JSp和servlet代码可以迁移到Spring框架吗?

    我是网络开发的新手 我正在使用 servlet 和 JSP 进行 Web 开发 但是 我最近了解到 Spring 框架适合包含 servlet jsp 等的开发 所以 我的问题是我现在可以使用 Spring 框架运行我的程序吗 比如 我有
  • AS3 中的 Flash 翻页卷曲效果

    我正在开发一个项目 需要使用 Flash 开发翻页 卷曲 效果 如下例所示 http www actionscript org showMovie php id 459http www actionscript org showMovie
  • 没有着色器的 OpenGL

    我已经阅读了一些教程来编写以下代码 唯一的区别是原始教程使用 SDL 而不是 GLEW 我不明白这段代码有什么问题 它可以编译 但我没有看到三角形 教程也没有使用着色器 include
  • 使用 Python 3 通过 way2sms 发送短信

    我一直在尝试使用 way2sms 发送免费短信 我发现这个链接似乎适用于 python 3 https github com shubhamc183 way2sms https github com shubhamc183 way2sms
  • Google 聊天机器人 - 发送私人消息而不发生事件

    我有一个正在 PM 中工作的机器人 我可以与它交谈并让它毫无问题地完成我的任务 但我不知道如何让它向特定的其他人发送消息 我希望它能够向特定的用户列表发送私人消息 而无需这些用户的任何交互 唯一的交互是我发出的命令 要求它向其他人发送消息
  • JavaFx - 线程“JavaFX 应用程序线程”中的无尽异常 java.lang.NullPointerException

    我得到以下异常 甚至无法理解它出现在什么地方 这意味着什么 Exception in thread JavaFX Application Thread java lang NullPointerException at com sun ja
  • 在asp.net中生成PDF文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何制作pdf https stackoverflow com questions 575584 how to make pdf 在 Asp net 中创建 pdf 文件 https stackove
  • Raspberry 3 上的 GSM/GPRS 模块与 Android Things 原生集成

    我想知道是否有任何方法可以使 GPRS GSM 模块 SIM800L 作为 android 中的 默认 连接 允许浏览互联网并使用 Android 库发出请求 似乎不是 因为如this https stackoverflow com a 4
  • html 中字体标签的最佳替代品

    自从fontHTML 中的标签在 HTML5 中已被弃用 我明白为什么 是否有一个干净的解决方案可以将某些属性和样式仅应用于portions段落文本 我正在使用 JavaScript 来解析 XML 文件 该文件依赖于以下事实 font标签
  • 处理单元测试和集成测试之间的重复

    我有一个由多个类实现的算法 所有类都由单元测试覆盖 我想重构它 这将改变两个类的行为 当我更改一个类及其测试时 所有单元测试都会通过 但在重构完成之前算法会变得不正确 这个例子说明 单元测试的完全覆盖有时是不够的 我需要在输入输出方面对整个
  • Android WebView 未加载 URL

    我想加载URL http www teluguoneradio com rssHostDescr php hostId 147 in WebView 我使用了以下代码 webView WebView findViewById R id we
  • 学说迁移phar,如何设置类型映射?

    我想在我的非 symfony 项目中使用学说迁移 所以我从https github com doctrine migrations https github com doctrine migrations 我正确配置了所有内容 数据库配置和
  • Angular Reactive Forms 模式验证:正则表达式无效

    我在 AngularJS 网站上有一个用于澳大利亚电话号码验证的正则表达式 我在反应式表单验证器中设置了确切的模式 如下所示 Validators pattern 0 1 0 61 2 4 3 7 8 0 1 0 1 0 9 2 0 1 0
  • Bootstrap 3.0.2 中的面包屑导航栏

    我是 Bootstrap 的新手 我想创建一个带有一些内容 链接 下拉菜单 和面包屑的导航栏 但是当我将面包屑放入导航栏中时 我的显示有问题 块 我认为 这是我的示例代码
  • 瑞典 SSN 正则表达式拒绝特定年龄以下的用户

    我的正则表达式有问题 我已经可以验证正确的瑞典社会安全号码以符合这些标准 YYMMDDNNNN 年月日 NNNN 年年月日DDNNNN YYYYMMDD NNNN 但如果用户未满 18 岁 我也想拒绝该用户注册 我的常规表达现在是这样的 有
  • 如何在flutter中仅在一页上阻止屏幕截图?

    我想知道如何仅在一页上阻止颤振中的屏幕截图 我读到有一种方法可以阻止颤振应用程序中的屏幕截图 方法是 getWindow addFlags LayoutParams FLAG SECURE 但我的理解是 当我这样做时 整个应用程序中的屏幕截
  • 如何在Python中删除图像的背景

    我有一个包含全角人类图像的数据集 我想删除这些图像中的所有背景 只留下全角人物 我的问题 有没有Python代码可以做到这一点 我是否需要每次都指定人员对象的坐标 这是使用 Python OpenCV 的一种方法 读取输入 转换为灰色 阈值