最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

安裝庫

pip install opencv-python

實現(xiàn)代碼

import cv2
import numpy as np

def convert_transparent_to_white_opencv(input_image_path, output_image_path):
    """
    將透明背景的圖片轉(zhuǎn)換為白色背景,使用OpenCV實現(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)建一個與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實現(xiàn)。

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

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

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

PIL方法函數(shù)封裝

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

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

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

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

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

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

相關(guān)文章

  • python?如何使用requests下載文件

    python?如何使用requests下載文件

    這篇文章主要介紹了python?如何使用requests下載文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Pycharm安裝第三方庫并更換鏡像的詳細(xì)教程

    Pycharm安裝第三方庫并更換鏡像的詳細(xì)教程

    在使用pycharm學(xué)習(xí)python的時候,經(jīng)常需要第三方庫,沒有第三方庫程序就會報錯,pycharm也會提醒你要安裝所需要的庫,下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝第三方庫并更換鏡像的詳細(xì)教程,需要的朋友可以參考下
    2023-05-05
  • Python 合并拼接字符串的方法

    Python 合并拼接字符串的方法

    這篇文章主要介紹了Python 合并拼接字符串的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python venv和virtualenv模塊詳解

    python venv和virtualenv模塊詳解

    venv 是 Python 內(nèi)置標(biāo)準(zhǔn)庫中創(chuàng)建輕量級虛擬環(huán)境的工具,本文通過示例代碼介紹python venv和virtualenv的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Python輕松管理與操作文件的技巧分享

    Python輕松管理與操作文件的技巧分享

    在日常開發(fā)中,我們經(jīng)常會遇到需要對文件進(jìn)行操作的場景,如讀寫文件、文件夾操作等。本文將為大家介紹一些 Python 中處理文件的實用技巧,讓你的工作更高效
    2023-05-05
  • Python中裝飾器使用方法整理

    Python中裝飾器使用方法整理

    這篇文章主要介紹了Python中裝飾器使用方法整理,裝飾器是給現(xiàn)有的模塊增添新的小功能,可以對原函數(shù)進(jìn)行功能擴(kuò)展,而且還不需要修改原函數(shù)的內(nèi)容,也不需要修改原函數(shù)的調(diào)用,需要的朋友可以參考下
    2023-08-08
  • python中map、any、all函數(shù)用法分析

    python中map、any、all函數(shù)用法分析

    這篇文章主要介紹了python中map、any、all函數(shù)用法,實例分析了map、any、all函數(shù)的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 基于Python實現(xiàn)骰子小游戲

    基于Python實現(xiàn)骰子小游戲

    骰子,是現(xiàn)在娛樂場所最常見的一種玩樂項目。一般骰子分兩人和兩人以上玩,而玩法有很多。本文就來用Python實現(xiàn)個骰子小游戲,感興趣的可以了解一下
    2023-02-02
  • 基于Python實現(xiàn)體育彩票選號器功能代碼實例

    基于Python實現(xiàn)體育彩票選號器功能代碼實例

    這篇文章主要介紹了基于Python實現(xiàn)體育彩票選號器功能代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python自動化測試PO模型封裝過程詳解

    Python自動化測試PO模型封裝過程詳解

    在 PO 模式中抽離封裝集成一個BasePage 類,該基類應(yīng)該擁有一個只實現(xiàn) webdriver 實例的屬性,通常情況下PO 模型可以大大提高測試用例的維護(hù)效率
    2021-06-06

最新評論

惠来县| 龙岩市| 舒兰市| 高尔夫| 靖边县| 繁峙县| 北辰区| 吉木萨尔县| 永福县| 云南省| 安西县| 中阳县| 新疆| 上犹县| 江城| 会理县| 扶风县| 巴里| 丰县| 崇信县| 福建省| 张家港市| 扎赉特旗| 辉南县| 丰台区| 斗六市| 卓尼县| 丹江口市| 塔河县| 峨眉山市| 霍州市| 十堰市| 晴隆县| 民权县| 临沧市| 开封县| 拉萨市| 嘉荫县| 亚东县| 灌云县| 邹平县|