图像&视频编辑工具箱MMEditing使用示例:图像抠图(matting)

2023-11-15

      MMEditing的介绍及安装参考:https://blog.csdn.net/fengbingchun/article/details/126331541,这里给出图像抠图的测试代码,论文:《Indices Matter: Learning to Index for Deep Image Matting》:

      (1).下载模型(checkpoint):

def download_checkpoint(path, name, url):
	if os.path.isfile(path+name) == False:
		print("checkpoint(model) file does not exist, now download ...")
		subprocess.run(["wget", "-P", path, url])

path = "../../data/model/"
checkpoint = "indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth"
url = "https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth"
download_checkpoint(path, checkpoint, url)

      (2).根据配置文件和checkpoint文件构建模型:

config = "../../src/mmediting//configs/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k.py"
model = init_model(config, path+checkpoint, device)

      (3).准备测试图像:

image_path = "../../data/image/"
image_name = "5.jpg"
trimap_name = "5_trimap.png"

      每组需要2张,一张是待抠图的彩色图像;一张是三元图(trimap, 是对给定图像的一种粗略划分,即将给定图像划分为前景、背景和待求未知区域,每个像素取值为{0,128,255}其中之一,分别代表前景、未知与背景),如下图所示:源图来自于网络,三元图通过photoshop处理

      (4).进行推理抠图:

result = matting_inference(model, image, trimap) * 255

      (5).显示执行结果及保存图像:

print(f"result shape: {result.shape}; max value: {np.max(result)}") # result shape: (450, 617); max value: 255.0
_, result = cv2.threshold(result, 254, 255, cv2.THRESH_BINARY)
result = result.astype(np.uint8)
cv2.imwrite("../../data/result_matting_indexnet.jpg", result)
cv2.imshow("show_result", result)
cv2.waitKey(0)

mat1 = cv2.imread(image)
mat3 = cv2.cvtColor(result, cv2.COLOR_GRAY2BGR)
mat3 = cv2.bitwise_and(mat1, mat3, result)
# cv2.imshow("show_mat3", mat3)
# cv2.waitKey(0)

_, mat4 = cv2.threshold(result, 254, 255, cv2.THRESH_BINARY_INV)
mat4 = cv2.cvtColor(mat4, cv2.COLOR_GRAY2BGR)
mat4 = mat4.astype(np.uint8)

mat2 = np.zeros(mat1.shape, dtype=np.uint8)
mat2[:,:] = (0, 255, 0)
mat2 = cv2.bitwise_and(mat2, mat4)

mat2 = mat3 + mat2
cv2.imwrite("../../data/result_matting_indexnet_bgr.jpg", mat2)
cv2.imshow("show_mat2", mat2)
cv2.waitKey(0)

      结果图如下所示:左图为推理结果

      GitHub: https://github.com/fengbingchun/PyTorch_Test

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

图像&视频编辑工具箱MMEditing使用示例:图像抠图(matting) 的相关文章

随机推荐

  • 梯度下降的作用及分类

    一 介绍 梯度下降法是一个最优化算法 通常也称 最速下降法 常用于机器学习和人工智能中递归性逼近最小偏差模型 梯度下降的方向就是用负梯度方向为搜索方向 沿着梯度下降的方向求解极小值 在训练过程中 每次的正向传播都会得到输出值和真实值的损失值
  • keras使用callbacks后报错:tensorflow.python.framework.errors_impl.NotFoundError: Failed to create a direct

    参考 https stackoverflow com questions 59439124 keras tuner search function throws failed to create a newwriteablefile err
  • Maven引入本地jar包的方法分享

    转自 maven中如何包含本地jar包呢 有时候我们的jar包来源于maven仓库 有时候来源于本地仓库 有时候来源于本地文件 来源于仓库的文件 我们只需输入相应的坐标即可 那么jar包来源于本地文件 如何处理呢 下文笔者讲述maven中包
  • 二十三种设计模式第二十一篇--解释器模式

    解释器模式 Interpreter Pattern 是一种行为设计模式 它用于定义一种语言的语法结构和解释器 使得可以解释并执行特定的语法规则 该模式可以将复杂的语言表达式分解为更小的语法单元 并定义其解释过程 解释器模式的核心组成部分包括
  • NameError: global name ‘***‘ is not defined

    错误示范 class Solution object def fib self n type n int rtype int while n gt 0 if n 1 or n 2 return 1 else return fib n 1 f
  • 手把手带你实现Linux内核编译步骤及配置

    linux 系统体系结构 linux kernel体系结构 arm有7种工作模式 x86也实现了4个不同级别RING0 RING3 RING0级别最高 这样linux用户代码运行在RING3下 内核运行在RING0 这样系统本身就得到了 充
  • linux中把一个文件的内容复制到(或覆盖)另一个文件的末尾

    转载自 https blog csdn net u013991521 article details 80528647 问题描述 比如11的文件内容是 hello 22的文件内容是 world 将22的文件内容复制到11文件的末尾 11文件
  • python类的属性和实例的属性有什么区别

    在 Python 中 类属性和实例属性是两种不同类型的属性 它们在用途和作用域上有所不同 下面是关于它们的区别的详细解释 定义位置 类属性 定义在类的主体中 但在任何类方法之外 实例属性 通常在 init 方法或其他类方法中使用 self
  • 自动化测试工具软测界的不二之选,还不快速来了解

    目录 引言 前言 一 龙测AI TestOps云平台使用教程 1 如何登录龙测AI TestOps云平台 登录方法 登录方法 2 龙测AI TestOps云平台界面布局 3 龙测AI TestOps云平台菜单功能 创建项目 应用管理 设备管
  • 若依框架针对不同用户使用不同样式判断

    在开发中 有时候会针对不同用户使用不同样式 如果使用权限判断符的话会出现 请设置权限的问题 这样我们可以导入若依框架原本的权限判断函数 import checkPermi checkRole from utils permission 权限
  • Hibernate4与hibernate3主要区别与版本不一致导致的错误

    Hibernate版本改动 Hibernate4的改动较大只有spring3 1以上版本能够支持 Spring3 1取消了HibernateTemplate 因为Hibernate4的事务管理已经很好了 不用Spring再扩展了 这里简单介
  • 为何大量网站不能抓取?爬虫突破封禁的6种常见方法

    转载自 https www cnblogs com junrong624 p 5533655 html 在互联网上进行自动数据采集 抓取 这件事和互联网存在的时间差不多一样长 今天大众好像更倾向于用 网络数据采集 有时会把网络数据采集程序称
  • FileZilla - The free FTP solution

    FileZilla The free FTP solution https filezilla project org index php https www filezilla cn 1 Overview The FileZilla Cl
  • JavaScript重写Symbol(Symbol.iterator)实现迭代器(2)

    重写数组for of底层用的迭代器 for of 底层用Symbol Symbol iterator 迭代器 arr 底层用Symbol Symbol iterator 迭代器 示例图 代码 h1 对象遍历重写iterator接口2 h1
  • python中class用法实例

    python中class用法实例 https blog csdn net u010551600 article details 79126911 该程序的作用是找到studet txt文件中 GPA最高的那名同学 并打印出他的信息 程序运行
  • 【机器学习】神经网络介绍【转】

    深度学习 神经网络介绍 1 神经元 2 激活函数 3 感知机与多层网络 4 误差反向传播 参考 周志华 机器学习 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络 它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应 Koho
  • micropython驱动ST7789v 2.4寸液晶显示中文

    一 ST7789v介绍 ST7789v是小尺寸液晶中常用的驱动芯片 作者手里的是网上买的一块2 4寸液晶模组 接口 为SPI接口 网上能找到这个芯片的micropython驱动 这不是本文的重点 本文的重点是如何利用这个驱动 并使用字库的方
  • 记录禁用联想笔记本电脑的触摸板

    触摸板在笔记本打字的时候很容易误操作 于是要关闭 我的这台Lenovo 关闭触摸板方法很直观很简单 键盘最上面一排Fxx的按钮中 F6键上就画着触摸板的小图标 按下F6 就关闭 再按一次 就开启 可能有些电脑不是 只是记录我使用的这台的情况
  • 快速理解事件委托?

    捕获和冒泡允许我们实现一种被称为 事件委托 的强大的事件处理模式 如果我们有许多以类似方式处理的元素 那么就不必为每个元素分配一个处理程序 而是将单个处理程序放在它们的共同祖先上 示例代码
  • 图像&视频编辑工具箱MMEditing使用示例:图像抠图(matting)

    MMEditing的介绍及安装参考 https blog csdn net fengbingchun article details 126331541 这里给出图像抠图的测试代码 论文 Indices Matter Learning to