欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python將圖片透明背景轉(zhuǎn)為白色背景的兩種方法

 更新時(shí)間:2025年05月14日 10:55:07   作者:去追風(fēng),去看海  
這篇文章主要為大家詳細(xì)介紹了python如何使用opencv2和PIL實(shí)現(xiàn)將圖片透明背景轉(zhuǎn)換成白色背景功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

方法一:使用OpenCV的函數(shù)封裝

安裝庫

pip install opencv-python

實(shí)現(xiàn)代碼

import cv2
import numpy as np

def convert_transparent_to_white_opencv(input_image_path, output_image_path):
    """
    將透明背景的圖片轉(zhuǎn)換為白色背景,使用OpenCV實(shí)現(xiàn)。

    參數(shù):
    input_image_path: str,輸入圖片的路徑
    output_image_path: str,輸出圖片的路徑

    返回:
    無
    """
    # 讀取帶透明背景的圖片(假設(shè)圖片是PNG格式)
    img = cv2.imread(input_image_path, cv2.IMREAD_UNCHANGED)

    # 檢查是否讀取成功
    if img is None:
        raise ValueError(f"Image at path {input_image_path} could not be read.")

    # 分離RGBA通道
    b, g, r, a = cv2.split(img)

    # 創(chuàng)建一個(gè)與Alpha通道大小相同的全白背景
    white_background = np.ones_like(a) * 255

    # 將Alpha通道歸一化到0-1范圍
    a = a / 255.0

    # 按照Alpha通道的透明度混合原圖和白色背景
    r = r * a + white_background * (1 - a)
    g = g * a + white_background * (1 - a)
    b = b * a + white_background * (1 - a)

    # 合并BGR通道
    result = cv2.merge((b, g, r))

    # 保存處理后的圖片
    cv2.imwrite(output_image_path, result)

# 示例調(diào)用
convert_transparent_to_white_opencv('input_image.png', 'output_image_opencv.png')

方法二:使用PIL的函數(shù)封裝

安裝庫

pip install pillow

完整代碼

from PIL import Image

def convert_transparent_to_white_pil(input_image_path, output_image_path):
    """
    將透明背景的圖片轉(zhuǎn)換為白色背景,使用PIL實(shí)現(xiàn)。

    參數(shù):
    input_image_path: str,輸入圖片的路徑
    output_image_path: str,輸出圖片的路徑

    返回:
    無
    """
    # 讀取帶透明背景的圖片(假設(shè)圖片是PNG格式)
    img = Image.open(input_image_path).convert("RGBA")

    # 創(chuàng)建一個(gè)與原圖片大小相同的白色背景
    white_background = Image.new("RGB", img.size, (255, 255, 255))

    # 將原圖片粘貼到白色背景上,并使用Alpha通道作為掩碼
    white_background.paste(img, (0, 0), img)

    # 保存處理后的圖片
    white_background.save(output_image_path)

# 示例調(diào)用
convert_transparent_to_white_pil('input_image.png', 'output_image_pil.png')

詳細(xì)解釋

OpenCV方法函數(shù)封裝

  • 函數(shù)定義:定義一個(gè)函數(shù)convert_transparent_to_white_opencv,接受輸入圖片路徑和輸出圖片路徑作為參數(shù)。
  • 讀取圖片:在函數(shù)內(nèi)部使用cv2.imread()讀取圖片,并進(jìn)行透明通道處理。
  • 圖像處理:按之前的步驟進(jìn)行通道分離、創(chuàng)建白色背景、圖像合成。
  • 保存圖片:將處理后的圖片保存到指定路徑。

PIL方法函數(shù)封裝

  • 函數(shù)定義:定義一個(gè)函數(shù)convert_transparent_to_white_pil,接受輸入圖片路徑和輸出圖片路徑作為參數(shù)。
  • 讀取圖片:在函數(shù)內(nèi)部使用Image.open()讀取圖片,并進(jìn)行透明通道處理。
  • 圖像粘貼:按之前的步驟創(chuàng)建白色背景,將原圖粘貼到白色背景上。
  • 保存圖片:將處理后的圖片保存到指定路徑。

通過上述封裝函數(shù),可以更方便地將帶透明背景的圖片轉(zhuǎn)換為白色背景的圖片。

可以將帶透明背景的圖片轉(zhuǎn)換為任意顏色背景的圖片,并在任意顏色背景之間進(jìn)行轉(zhuǎn)換。以下是使用OpenCV和PIL的方法,并進(jìn)行了函數(shù)封裝,允許用戶指定任意背景顏色。

1, 使用OpenCV的函數(shù)封裝

import cv2
import numpy as np

def convert_transparent_to_color_opencv(input_image_path, output_image_path, bg_color=(255, 255, 255)):
    """
    將透明背景的圖片轉(zhuǎn)換為任意顏色背景,使用OpenCV實(shí)現(xiàn)。

    參數(shù):
    input_image_path: str,輸入圖片的路徑
    output_image_path: str,輸出圖片的路徑
    bg_color: tuple,背景顏色(默認(rèn)為白色 (255, 255, 255))

    返回:
    無
    """
    # 讀取帶透明背景的圖片(假設(shè)圖片是PNG格式)
    img = cv2.imread(input_image_path, cv2.IMREAD_UNCHANGED)

    # 檢查是否讀取成功
    if img is None:
        raise ValueError(f"Image at path {input_image_path} could not be read.")

    # 分離RGBA通道
    b, g, r, a = cv2.split(img)

    # 創(chuàng)建一個(gè)與Alpha通道大小相同的指定顏色背景
    background = np.ones_like(a) * np.array(bg_color[::-1], dtype=np.uint8)[:, None, None]

    # 將Alpha通道歸一化到0-1范圍
    a = a / 255.0

    # 按照Alpha通道的透明度混合原圖和背景
    r = r * a + background[0] * (1 - a)
    g = g * a + background[1] * (1 - a)
    b = b * a + background[2] * (1 - a)

    # 合并BGR通道
    result = cv2.merge((b, g, r))

    # 保存處理后的圖片
    cv2.imwrite(output_image_path, result)

# 示例調(diào)用
convert_transparent_to_color_opencv('input_image.png', 'output_image_opencv.png', bg_color=(0, 128, 255))

2, 使用PIL的函數(shù)封裝

from PIL import Image

def convert_transparent_to_color_pil(input_image_path, output_image_path, bg_color=(255, 255, 255)):
    """
    將透明背景的圖片轉(zhuǎn)換為任意顏色背景,使用PIL實(shí)現(xiàn)。

    參數(shù):
    input_image_path: str,輸入圖片的路徑
    output_image_path: str,輸出圖片的路徑
    bg_color: tuple,背景顏色(默認(rèn)為白色 (255, 255, 255))

    返回:
    無
    """
    # 讀取帶透明背景的圖片(假設(shè)圖片是PNG格式)
    img = Image.open(input_image_path).convert("RGBA")

    # 創(chuàng)建一個(gè)與原圖片大小相同的指定顏色背景圖像
    background = Image.new("RGB", img.size, bg_color)

    # 將原圖片粘貼到指定顏色背景上,并使用透明度作為掩碼
    background.paste(img, (0, 0), img)

    # 保存處理后的圖片
    background.save(output_image_path)

# 示例調(diào)用
convert_transparent_to_color_pil('input_image.png', 'output_image_pil.png', bg_color=(0, 128, 255))

詳細(xì)解釋

1.OpenCV方法函數(shù)封裝

  • 函數(shù)定義:定義一個(gè)函數(shù)convert_transparent_to_color_opencv,接受輸入圖片路徑、輸出圖片路徑和背景顏色作為參數(shù)。
  • 讀取圖片:在函數(shù)內(nèi)部使用cv2.imread()讀取帶有透明背景的圖片,并進(jìn)行透明通道處理。
  • 檢查是否讀取成功:確保圖片成功讀取,否則拋出異常。
  • 分離RGBA通道:使用cv2.split()將圖片分離為四個(gè)通道(RGBA)。
  • 創(chuàng)建背景:創(chuàng)建一個(gè)與Alpha通道大小相同的指定顏色背景,顏色轉(zhuǎn)換為BGR順序以符合OpenCV的顏色順序。
  • 圖像合成:將Alpha通道歸一化到0-1范圍,并按照Alpha通道的透明度混合原圖和背景。
  • 合并通道并保存圖片:合并BGR通道,并保存處理后的圖片。

2.PIL方法函數(shù)封裝

  • 函數(shù)定義:定義一個(gè)函數(shù)convert_transparent_to_color_pil,接受輸入圖片路徑、輸出圖片路徑和背景顏色作為參數(shù)。
  • 讀取圖片:在函數(shù)內(nèi)部使用Image.open()讀取帶有透明背景的圖片,并轉(zhuǎn)換為RGBA模式。
  • 創(chuàng)建背景:創(chuàng)建一個(gè)與原圖片大小相同的指定顏色背景圖像。
  • 圖像粘貼:使用paste()方法將原圖粘貼到背景上,并使用透明度作為掩碼。
  • 保存圖片:保存處理后的圖片。

這兩種方法都可以將透明背景轉(zhuǎn)換為任意顏色背景,并支持在任意顏色背景之間進(jìn)行轉(zhuǎn)換??梢愿鶕?jù)具體需求選擇合適的工具和方法。

使用OpenCV將圖片透明背景添加稍微大一點(diǎn)的白色背景

import cv2
import numpy as np

def add_white_background_with_padding_opencv(input_image_path, output_image_path, padding=10):
    """
    將透明背景的圖片轉(zhuǎn)換為帶有稍微大一點(diǎn)的白色背景的圖片,使用OpenCV實(shí)現(xiàn)。

    參數(shù):
    input_image_path: str,輸入圖片的路徑
    output_image_path: str,輸出圖片的路徑
    padding: int,背景的擴(kuò)展大?。J(rèn)為10像素)

    返回:
    無
    """
    # 讀取帶透明背景的圖片(假設(shè)圖片是PNG格式)
    img = cv2.imread(input_image_path, cv2.IMREAD_UNCHANGED)

    # 檢查是否讀取成功
    if img is None:
        raise ValueError(f"Image at path {input_image_path} could not be read.")

    # 分離RGBA通道
    b, g, r, a = cv2.split(img)

    # 獲取原圖片的尺寸
    height, width = a.shape

    # 創(chuàng)建一個(gè)稍微大一點(diǎn)的白色背景
    new_height = height + 2 * padding
    new_width = width + 2 * padding
    white_background = np.ones((new_height, new_width, 3), dtype=np.uint8) * 255

    # 將Alpha通道歸一化到0-1范圍
    a = a / 255.0

    # 創(chuàng)建一個(gè)新的RGBA圖像并將原圖像放到中央
    result = np.zeros((new_height, new_width, 3), dtype=np.uint8)
    for c in range(3):
        result[padding:padding + height, padding:padding + width, c] = img[:, :, c] * a + white_background[padding:padding + height, padding:padding + width, c] * (1 - a)

    # 保存處理后的圖片
    cv2.imwrite(output_image_path, result)

# 示例調(diào)用
add_white_background_with_padding_opencv('input_image.png', 'output_image_with_padding.png', padding=20)

詳細(xì)解釋

  • 函數(shù)定義:定義一個(gè)函數(shù)add_white_background_with_padding_opencv,接受輸入圖片路徑、輸出圖片路徑和背景擴(kuò)展大小作為參數(shù)。
  • 讀取圖片:使用cv2.imread()讀取帶有透明背景的圖片,并指定cv2.IMREAD_UNCHANGED以確保讀取透明通道(Alpha通道)。
  • 檢查是否讀取成功:確保圖片成功讀取,否則拋出異常。
  • 分離RGBA通道:使用cv2.split()將圖片分離為四個(gè)通道(RGBA)。
  • 獲取原圖片尺寸:獲取原圖片的高度和寬度。
  • 創(chuàng)建白色背景:創(chuàng)建一個(gè)稍微大一點(diǎn)的白色背景,背景大小為原圖片大小加上兩倍的擴(kuò)展大小。
  • 將Alpha通道歸一化:將Alpha通道的值歸一化到0-1范圍。
  • 圖像合成:創(chuàng)建一個(gè)新的圖像,并將原圖像放到中央,同時(shí)根據(jù)Alpha通道的透明度混合原圖和白色背景。

保存處理后的圖片:將處理后的圖片保存到指定路徑。

通過這種方法,可以將帶透明背景的圖片轉(zhuǎn)換為帶有稍微大一點(diǎn)白色背景的圖片。

以上就是python將圖片透明背景轉(zhuǎn)為白色背景的兩種方法的詳細(xì)內(nèi)容,更多關(guān)于python圖片背景轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中模塊與包有相同名字的處理方法

    Python中模塊與包有相同名字的處理方法

    這篇文章主要給大家介紹了在Python中模塊與包有相同名字的處理方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python3中編碼與解碼之Unicode與bytes的講解

    Python3中編碼與解碼之Unicode與bytes的講解

    今天小編就為大家分享一篇關(guān)于Python3中編碼與解碼之Unicode與bytes的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python中LSTM回歸神經(jīng)網(wǎng)絡(luò)時(shí)間序列預(yù)測(cè)詳情

    Python中LSTM回歸神經(jīng)網(wǎng)絡(luò)時(shí)間序列預(yù)測(cè)詳情

    這篇文章主要介紹了Python中LSTM回歸神經(jīng)網(wǎng)絡(luò)時(shí)間序列預(yù)測(cè)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Python基于Tensor FLow的圖像處理操作詳解

    Python基于Tensor FLow的圖像處理操作詳解

    這篇文章主要介紹了Python基于Tensor FLow的圖像處理操作,結(jié)合實(shí)例形式分析了Python基于Tensor FLow操作圖像解碼、縮放、剪切、翻轉(zhuǎn)、調(diào)整對(duì)比度、明度、飽和度等相關(guān)操作技巧,需要的朋友可以參考下
    2020-01-01
  • python實(shí)現(xiàn)字典合并的五種方法(附示例代碼)

    python實(shí)現(xiàn)字典合并的五種方法(附示例代碼)

    在Python中,有多種方法可以通過使用各種函數(shù)和構(gòu)造函數(shù)來合并字典,在本文中,我們將討論一些合并字典的方法,并通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • 詳解Django配置優(yōu)化方法

    詳解Django配置優(yōu)化方法

    這篇文章主要介紹了詳解Django配置優(yōu)化方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python中optionParser模塊的使用方法實(shí)例教程

    Python中optionParser模塊的使用方法實(shí)例教程

    這篇文章主要介紹了Python中optionParser模塊的使用方法,功能非常強(qiáng)大,需要的朋友可以參考下
    2014-08-08
  • 一文帶你了解Python與svg之間的操作

    一文帶你了解Python與svg之間的操作

    svgwrite是一個(gè)?Python?庫,用于生成簡(jiǎn)單的?SVG?圖片。它提供了一組類似于繪圖的?API,使用者可以在?SVG?畫布上畫線、矩形、圓等圖形。本文主要介紹了如何利用svgwrite進(jìn)行SVG圖片的操作,需要的可以參考一下
    2023-01-01
  • 如何使用?Python?實(shí)現(xiàn)?DeepSeek?R1?本地化部署

    如何使用?Python?實(shí)現(xiàn)?DeepSeek?R1?本地化部署

    文章介紹了如何使用Python實(shí)現(xiàn)DeepSeekR1本地化部署,包括硬件環(huán)境、Python環(huán)境、安裝依賴包、配置與運(yùn)行代碼等步驟,幫助讀者輕松部署并運(yùn)行本地AI助手,感興趣的朋友一起看看吧
    2025-02-02
  • Python讀取mp3中ID3信息的方法

    Python讀取mp3中ID3信息的方法

    這篇文章主要介紹了Python讀取mp3中ID3信息的方法,實(shí)例分析了Python中mutagen包的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論