alpha matte 获取边缘图像

2024-01-01 20:30
文章标签 图像 获取 边缘 alpha matte

本文主要是介绍alpha matte 获取边缘图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码

from PIL import Image
from scipy.ndimage.morphology import distance_transform_edt
import torch 
import numpy as nppth = r"F:\software\vscode\project\bgm\v2\BackgroundMattingV2\data\VideoMatte240K_JPEG_SD\train\pha\0000\00000.jpg"
with Image.open(pth) as img:img = img.convert("1")  radius = 1# print(img.size) # (768, 432)img.save("black_white_img.jpg")np_img = np.array(img) # value: True or Falseorigin_edt = distance_transform_edt(np_img)# print(np.max(origin_edt)) # 41.23105625617661# print(np.min(origin_edt)) # 0.0# origin_edt_img = Image.fromarray(origin_edt.astype(np.uint8))# origin_edt_img.save("origin_edt_img.jpg")pai_edt = distance_transform_edt(1-np_img)# print(np.max(pai_edt)) # 549.083782313774# print(np.min(pai_edt)) # 0.0# pai_edt_img = Image.fromarray(pai_edt.astype(np.uint8))# pai_edt_img.save("pai_edt_img.jpg")plus_edt = origin_edt + pai_edt# print(np.max(plus_edt)) # 549.083782313774# print(np.min(plus_edt)) # 1.0plus_edt[plus_edt > radius] = 0# print(np.max(plus_edt)) # 10.0# print(np.min(plus_edt)) # 0.0plus_edt[plus_edt > 0] = 1# print(np.max(plus_edt))  # 1# print(np.min(plus_edt))  # 0plus_edt *= 255# print(np.max(plus_edt))  # 255# print(np.min(plus_edt))  # 0plus_edt = plus_edt.astype(np.uint8)# print(plus_edt.dtype) # uint8plus_edt_img = Image.fromarray(plus_edt)plus_edt_img.save("plus_edt_img.jpg")

alpha 图片:
alpha图
边缘图片:
边缘图片
alpha时0到1的值,包含中间的值,比如0.5。
img.convert(“1”) 把图片转换成数值只有True or False的图片。
distance_transform_edt 用于计算非零值到最近的零值的距离,最小值为0,代表本身是0值,如果是边缘像素(本身是非零,隔壁,左或右或上或下是零这样的情况),distance_transform_edt 值为1,内部的像素的distance_transform_edt 就是大于1。
至于为什么要img求一下distance_transform_edt , 1-img也求一下distance_transform_edt ,然后这两个distance_transform_edt 相加,简单来说就是为了让边缘更丰满的同时也让边缘的位置更准确,只算一个distance_transform_edt , 比如只算img的distance_transform_edt ,然后,非零的值只是在人物的内部,如果要获取边缘,那么最外围的是轮廓,如果让边缘更加丰满,只能往内扩展,那么这个边缘的中心就会往内部偏移。下图是同时算两个distance_transform_edt 的示例图:
edt

这篇关于alpha matte 获取边缘图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560429

相关文章

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i