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

Python去除圖片背景的兩種方式介紹

 更新時間:2025年06月18日 15:07:33   作者:培根芝士  
這篇文章主要為大家詳細介紹了Python去除圖片背景的兩種方式,一個是使用rembg,一個是使用U2-NET,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

1.使用rembg去除圖像背景

rembg 是一個開源的 Python 庫,專門用于去除圖像背景,它利用深度神經網絡能夠準確地識別并去除圖像背景,使用戶無需進行復雜的手動編輯,只需幾行代碼即可獲得專業(yè)效果。Rembg 基于 U2-Net 架構,有多種架構修改和經過測試的方法以提供最佳結果,還提供對 GPU 安裝的訪問以實現(xiàn)更快的處理。

安裝依賴:

pip install rembg

示例代碼:

from rembg import remove
from PIL import Image
import numpy as np
import cv2
 
def remove_background(source_image_path):
    # 打開要處理的圖片
    input_image = Image.open(source_image_path)
 
    # 使用 rembg 去除背景
    output_image = remove(input_image, 
        alpha_matting=False
    )
 
    # 將 PIL.Image 轉換為 OpenCV 格式
    output_image_array = np.array(output_image)
 
    # 如果是 RGBA 圖像,轉換為 BGRA(OpenCV 使用 BGRA 格式)
    if output_image_array.shape[2] == 4:
        output_image_bgra = cv2.cvtColor(output_image_array, cv2.COLOR_RGBA2BGRA)
    else:
        output_image_bgra = cv2.cvtColor(output_image_array, cv2.COLOR_RGB2BGR)
    return output_image_bgra

2.使用U2-NET去除圖像背景

U2-Net 是一種用于顯著目標檢測的深度學習模型,在 CVPR2020 開源后備受關注。其具有兩層嵌套的 U 型結構,底層是帶有新穎的 ReSidual U-Block(RSU)模塊,可在不降低特征圖分辨率的情況下提取多尺度特征;頂層則類似于 U-Net 結構,每個階段都由 RSU 填充,這種結構使網絡能夠在不顯著增加內存和計算成本的情況下,加深網絡并獲得高分辨率特征圖,從而有效捕捉顯著目標的多尺度信息。

示例代碼:

import torch
import os
import cv2
import numpy as np
from torchvision import transforms
from PIL import Image
import torch.nn as nn
from torch.nn import BatchNorm2d
from u2net import U2NET
from base_util import get_images_in_dir
 
# 定義U-2-Net模型結構
class REBNCONV(nn.Module):
    def __init__(self, in_ch=3, out_ch=3, dirate=1):
        super(REBNCONV, self).__init__()
        self.conv_s1 = nn.Conv2d(in_ch, out_ch, 3, padding=1 * dirate, dilation=1 * dirate)
        self.bn_s1 = BatchNorm2d(out_ch)
        self.relu_s1 = nn.ReLU(inplace=True)
 
    def forward(self, x):
        hx = x
        xout = self.relu_s1(self.bn_s1(self.conv_s1(hx)))
        return xout
 
# 定義U-2-Net模型的其他組件...
def normPRED(d):
    ma = torch.max(d)
    mi = torch.min(d)
    dn = (d - mi) / (ma - mi)
    return dn
 
def remove_background(input_path, output_path, model_path='models/u2net.pth'):
    # 加載模型
    net = U2NET(3,1)
    net.load_state_dict(torch.load(model_path))
    if torch.cuda.is_available():
        net.cuda()
    net.eval()
    
    # 讀取圖像
    img = Image.open(input_path).convert('RGB')
 
    # 圖像預處理
    transforms_list = []
    transforms_list.append(transforms.Resize((320, 320)))
    transforms_list.append(transforms.ToTensor())
    transforms_list.append(transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]))
    transform = transforms.Compose(transforms_list)
    
    image = transform(img)
    image = image.unsqueeze(0)
    
    # 模型推理
    if torch.cuda.is_available():
        image = image.cuda()
    
    with torch.no_grad():
        d1, d2, d3, d4, d5, d6, d7 = net(image)
    
    # 獲取預測結果
    pred = d1[:, 0, :, :]
    pred = normPRED(pred)
    
    # 將預測結果轉換為掩碼
    predict = pred.squeeze()
    predict_np = predict.cpu().data.numpy()
    mask = Image.fromarray((predict_np * 255).astype(np.uint8))
    mask = mask.resize(img.size, resample=Image.BILINEAR)
    
    # 應用閾值處理掩碼
    mask_threshold = 0.5  # 閾值可以根據實際情況調整
    mask_array = np.array(mask)
    mask_array = np.where(mask_array > mask_threshold * 255, 255, 0).astype(np.uint8)
 
    kernel = np.ones((3, 3), np.uint8)  # 定義膨脹核
    mask_array = cv2.dilate(mask_array, kernel, iterations=1)
 
    # 應用掩碼到原始圖像
    img_array = np.array(img)
    
    # 創(chuàng)建透明背景的圖像
    transparent_img = np.zeros((img_array.shape[0], img_array.shape[1], 4), dtype=np.uint8)
    transparent_img[:, :, :3] = img_array
    transparent_img[:, :, 3] = mask_array
 
    # 保存結果
    Image.fromarray(transparent_img).save(output_path)
    print(f"已保存處理后的圖像到: {output_path}")

到此這篇關于Python去除圖片背景的兩種方式介紹的文章就介紹到這了,更多相關Python去除圖片背景內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django配置多個環(huán)境的MySQL數據庫的完整指南

    Django配置多個環(huán)境的MySQL數據庫的完整指南

    在?Django?項目中配置多個環(huán)境的?MySQL?數據庫是一個常見的需求,本文為大家詳細介紹了配置的完整方法,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • Python函數返回不定數量的值方法

    Python函數返回不定數量的值方法

    今天小編就為大家分享一篇Python函數返回不定數量的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python使用Keras庫中的LSTM模型生成新文本內容教程

    Python使用Keras庫中的LSTM模型生成新文本內容教程

    Python語言使用金庸小說文本庫,對文本進行預處理,然后使用Keras庫中的LSTM模型創(chuàng)建和訓練了模型,根據這個模型,我們可以生成新的文本,并探索小說的不同應用
    2024-01-01
  • python應用之如何使用Python發(fā)送通知到微信

    python應用之如何使用Python發(fā)送通知到微信

    現(xiàn)在通過發(fā)微信信息來做消息通知和告警已經很普遍了,下面這篇文章主要給大家介紹了關于python應用之如何使用Python發(fā)送通知到微信的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • Python操作PDF實現(xiàn)制作數據報告

    Python操作PDF實現(xiàn)制作數據報告

    Python操作PDF的庫有很多,比如PyPDF2、pdfplumber、PyMuPDF等等。本文將利用FPDF模塊操作PDF實現(xiàn)制作數據報告,感興趣的小伙伴可以嘗試一下
    2022-12-12
  • Django模板標簽中url使用詳解(url跳轉到指定頁面)

    Django模板標簽中url使用詳解(url跳轉到指定頁面)

    這篇文章主要介紹了Django模板標簽中url使用詳解(url跳轉到指定頁面),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • np.hstack()和np.dstack()的使用

    np.hstack()和np.dstack()的使用

    本文主要介紹了np.hstack()和np.dstack()的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • openstack中的rpc遠程調用的方法

    openstack中的rpc遠程調用的方法

    今天通過本文給大家分享openstack中的rpc遠程調用的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07
  • python正則表達式去掉數字中的逗號(python正則匹配逗號)

    python正則表達式去掉數字中的逗號(python正則匹配逗號)

    在處理自然語言時123,000,000如果以標點符號分割,就會出現(xiàn)問題,好好的一個數字就被逗號肢解了,因此可以先下手把數字處理干凈(逗號去掉)
    2013-12-12
  • Django定制Admin頁面詳細實例(展示頁面和編輯頁面)

    Django定制Admin頁面詳細實例(展示頁面和編輯頁面)

    django自帶的admin因為功能和樣式比較簡陋,常常需要再次定制,下面這篇文章主要給大家介紹了關于Django定制Admin頁面(展示頁面和編輯頁面)的相關資料,需要的朋友可以參考下
    2023-06-06

最新評論

临猗县| 鄂温| 二连浩特市| 南丹县| 安庆市| 神池县| 湘乡市| 正宁县| 象山县| 铜山县| 铅山县| 南澳县| 揭西县| 贡山| 广平县| 利辛县| 连州市| 南宁市| 博白县| 霍州市| 安顺市| 博客| 永吉县| 仁寿县| 景宁| 岚皋县| 安宁市| 贵溪市| 夏河县| 札达县| 云浮市| 双辽市| 宜章县| 贞丰县| 宿州市| 都兰县| 乌拉特后旗| 威信县| 连南| 旬邑县| 文水县|