如何使用Python使jpg图像的白色背景透明?

问题描述 投票:0回答:1

我的 JPG 图片周围有白色背景。我不想改变图像本身,我只是想让白色背景透明。这是代码:

import cv2
import numpy as np
from PIL import Image

# 文件路径和文件名
path = "images/"
filename = "demo.jpg"
input_filepath = path + filename
output_filepath = path + "demo_transparent.png"

# 读取彩色图像
img = cv2.imread(input_filepath)

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 定义阈值
thresh = 250

# 阈值化图像
_, binary = cv2.threshold(gray, thresh, 255, cv2.THRESH_BINARY)

# 查找图像中的轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 创建一个全白的掩码
mask = np.ones_like(gray) * 255

# 绘制找到的轮廓,填充内部区域
cv2.drawContours(mask, contours, -1, 0, thickness=cv2.FILLED)

# 反转掩码
mask = cv2.bitwise_not(mask)

# 将原图转换为包含透明通道的图像
rgba = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)

# 遍历图像像素,将白色背景变为透明
height, width = mask.shape
for y in range(height):
    for x in range(width):
        if mask[y, x] == 255 and np.all(rgba[y, x][:3] == 255):
            rgba[y, x][3] = 0  # 设置Alpha通道为0(透明)

# 将结果保存为PNG图像
result = Image.fromarray(rgba)
result.save(output_filepath)

print(f"Processed image saved at: {output_filepath}")

这段代码确实帮助我使图像周围的白色背景透明,但它也改变了图像的颜色。我想问一下如何保留原图?谢谢。

我尝试请求 ChatGTP 帮助我,但他并不比人类聪明。

python image python-imaging-library jpeg transparent
1个回答
0
投票

您无法创建带有 Alpha 通道的 JPG 图像。 JPG 文件没有透明度。但您可以将 JPG 转换为 PNG

© www.soinside.com 2019 - 2024. All rights reserved.