Python去除图像白色背景

news/2024/11/20 21:17:00/

使用Pillow去除图像背景

安装依赖:

pip install pillow

实现步骤: 

  • 使用Pillow库加载图像,并将其转换为RGBA模式,以支持透明度。
  • 遍历图像的每个像素,检查其红色、绿色和蓝色值是否都高于预设的阈值。
  • 对于被视为白色的像素(即RGB值均高于阈值的像素),将其透明度设置为0(完全透明)。
  • 对于非白色像素,保留其原始透明度值(或不改变其透明度,因为它们在原始图像中可能已经是部分透明或有其他透明度值)。
  • 将修改后的图像保存为PNG格式,以保留透明度信息。

示例代码:

python">from PIL import Imagedef remove_image_bg_pil(input_path, output_path):img = Image.open(input_path)img = img.convert("RGBA")data = img.getdata()threshold = 240# 创建一个新的图片数据列表new_data = []for item in data:# 将背景颜色设置为透明,这里假设背景颜色为白色,RGB值为(255, 255, 255)if item[0] >= threshold and item[1] >= threshold and item[2] >= threshold:new_data.append((255, 255, 255, 0))else:new_data.append(item)# 更新图片数据img.putdata(new_data)img.save(output_path, 'PNG')

使用OpenCV去除图像背景

安装依赖:

pip install opencv-python
pip install numpy

实现步骤:

  • 创建RGBA图像:将BGR图像转换为RGBA图像,初始时Alpha通道设置为全不透明(255)。
  • 定义白色阈值:设置一个阈值,用于判断哪些像素是“白色”。
  • 创建掩码:使用cv2.inRange函数创建一个掩码,将白色像素标记为0(透明),其他像素标记为255(不透明)。
  • 反转掩码:使用cv2.bitwise_not函数反转掩码,只对白色像素进行透明处理。
  • 应用掩码到Alpha通道:使用cv2.bitwise_and函数将掩码应用到Alpha通道,使白色像素的Alpha通道变为0(透明)。

示例代码:

python">import cv2
import numpy as npdef remove_image_bg_cv(input_path, output_path):# 读取图像img = cv2.imread(input_path)b, g, r = cv2.split(img)rgba = cv2.merge((b, g, r, 255 * np.ones(b.shape, dtype=b.dtype)))# 定义白色阈值white_threshold = 240# 创建一个掩码,将白色像素标记为0(透明),其他像素标记为255(不透明)mask = cv2.inRange(img, (white_threshold, white_threshold, white_threshold), (255, 255, 255))mask_inv = cv2.bitwise_not(mask)cv2.imwrite("output2/mask.png", mask_inv)# 将掩码应用到Alpha通道rgba[:, :, 3] = cv2.bitwise_and(rgba[:, :, 3], mask_inv)# 保存结果图像cv2.imwrite(output_path, rgba)


http://www.ppmy.cn/news/1548579.html

相关文章

一天速转golang!

首先你需要会一门后端语言,以及要有基本的网络编程能力和并发思想 环境 本人在linux环境下下载的go1.23.3版本,使用Vimgo作为IDE 具体做法此处不再赘述,自行查阅其他博客 第一个Golang程序 package main ——定义声明包名(可以类比java来…

5.4.2-1 编写Java程序在HDFS上创建文件

本次实战涉及使用Java操作Hadoop HDFS,包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务,成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践,如检查文件存在性以避免重复创建,以及处理HDFS安全…

DAY120java审计第三方组件依赖库挖掘FastjsonShiroLog4jH2DB

组件漏洞判断插件 一、Tmall_demo-master(fastjson) 1、配置文件查找安装组件 1、JSON.parse(json) 2、JSON.parseObject 2、找可控的变量 3、利用组件漏洞 poc:propertyJson{"type":"java.net.Inet4Address","val":&q…

vue + axios config url 转码 空格转成 +(前端解决)

encodeURI 对一个完整的URI 进行编码,而encodeURIComponent对URI 的一个组件(单个参数)进行编码。 // 浏览器get请求 service.interceptors.request.use(config > { let url config.urlif (config.method get && config.params…

15分钟学 Go 实战项目六 :统计分析工具项目(30000字完整例子)

统计分析工具项目 1. 项目概述 功能模块说明难度数据收集CSV文件读取和解析★★☆☆☆数据分析基本统计和高级分析★★★☆☆可视化生成图表和报告★★★★☆导出功能支持多种格式导出★★☆☆☆Web界面交互式数据分析★★★★☆ 2. 项目架构 3. 核心代码实现 3.1 数据模型…

AI赋能电商:开启智慧零售新纪元

根据麦肯锡最新研究报告显示,到2025年,AI技术将为全球零售业带来4000-8000亿美元的价值增长。在中国,已有超过60%的电商平台开始应用AI技术优化运营流程。人工智能正在重塑电商行业的经营法则,带来前所未有的机遇与挑战。 一、智…

【FMC169】基于VITA57.1标准的4发4收射频子模块(基于ADRV9026)

产品概述 FMC169 是一款基于VITA57.1 标准规范,实现4 收4发的射频子模块,该板卡基于ADI的捷变收发器ADRV9026作为处理核心,射频工作范围为75MHz~6GHz频段,发射最大信号带宽450MHz,接收最大带宽200MHz,提供…

【MYSQL】什么是关系型数据库与非关系型数据库?

真正的让你快速理解什么是关系型数据库与非关系型数据库~ 主要是以查询语句,存储结构,拓展 性上的区别。 关系型数据库(最经典就是mysql,oracle):它是支持SQL语言,并且关系型数据库大部分都支持…