【Python】自动抠图换背景

一、效果展示

1.1 难度级别 ★★★★★

在这里插入图片描述
在这里插入图片描述

1.2 难度级别 ★★★★

在这里插入图片描述
在这里插入图片描述

1.3 难度级别 ★★★

在这里插入图片描述
在这里插入图片描述

1.4 难度级别 ★★

在这里插入图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

1.5 难度级别 ★

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

二、Removebg安装注册

2.1 Removebg介绍

基于 Python、Ruby 和深度学习技术开发,通过强大的 AI 人工智能算法实现自动识别出前景主体与背景图,分分钟秒秒钟完成抠图。这样下去PS 设计师都快要下岗了。
官网:https://www.remove.bg/zh
在这里插入图片描述

2.2 Removebg安装

Python直接安装
pip install removebg
或者使用清华源安装
pip install removebg -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3 Removebg注册,获取Api-key

官网:https://www.remove.bg/r/i9gdsvWJWtgYAHorq974KVz9
在这里插入图片描述

跳转到:https://accounts.kaleido.ai/users/sign_up
在这里插入图片描述

填写邮箱和密码
在这里插入图片描述
到邮箱激活
在这里插入图片描述
注册成功
在这里插入图片描述
拿到Api-key
在这里插入图片描述

三、代码实现

from PIL import Image
from removebg import RemoveBg
from pathlib import Path
from tkinter import ttk
from ttkthemes import ThemedTk
import tkinter as tk
from tkinter import filedialog, colorchooser
import random


img_path = ''
bg_color = 'blue'


def replace_bg(bg_color, colorname):
    try:
        lst_api_keys = [

                        ]
        api_key = random.sample(lst_api_keys, 1)[0]
        if len(path1.get().split('\\')) == 1:
            result_v.set("是不是忘了选图了?亲!")
            return
        Path('error.log').touch()
        rmbg = RemoveBg(api_key, 'error.log')
        rmbg.remove_background_from_img_file(img_path)
        img_no_bg = Image.open(Path(str(img_path) + '_no_bg.png'))
        new_img = Image.new('RGB', img_no_bg.size, color=bg_color)
        new_img.paste(img_no_bg, (0, 0, *img_no_bg.size), img_no_bg)
        str_img_path = str(img_path).lower().replace('.jpg', '').replace('.png', '')
        save_path = Path(str_img_path + '_' + colorname + '.png')
        new_img.save(save_path)
        result_v.set(colorname +"  换好了!帅吧?")
    except Exception as e:
        with open('error.log', 'a') as f:
            f.write(str(e) + '\n')
        print(e)
        if '402' in str(e):
            result_v.set(f'哎呀!没换成啊,再试一次吧!')
        else:
            result_v.set(e)

def selectFilePath():
    global img_path
    img_path = Path(filedialog.askopenfilename(title='选择原图片'))
    path1.set(img_path)
    result_v.set("有图了,想换哪个背景?")


def ChooseColor():
    rgb_color, bg_color = colorchooser.askcolor(title='颜色选择器')
    result_v.set(" " * 30)
    return bg_color

window = ThemedTk(theme="adapta", fonts=True, themebg=True)
window.title('证件照生成器' + ' '*10 + '心馨电脑专用')
label_style = ttk.Style()
label_style.configure("one.TLabel", font=("微软雅黑", 16, 'bold'), foreground="yellow", background="ligthgray")

result_v = tk.StringVar(value='先选图片,再换背景。')
result_label = tk.Label(window,  textvariable=result_v, font=("微软雅黑", 16), fg="green", bg='LightGrey')

path1 = tk.StringVar()
entry1 = ttk.Entry(window, textvariable=path1, width=50)
entry1.insert(0, '格式要求png/jpg')
button1 = tk.Button(window, width=10, text="选择图片", bg='yellow', command=selectFilePath)

button5 = tk.Button(window, text="自选背景", bg='orange', width=12, command=lambda: replace_bg(ChooseColor(), '自选背景'))
button6 = tk.Button(window, text="红背景", bg='tomato', width=12, command=lambda: replace_bg('#dc323c', '红背景'))
button7 = tk.Button(window, text="蓝背景", bg='deepskyblue', width=12, command=lambda: replace_bg('#0080ff', '蓝背景'))
button8 = tk.Button(window, text="白背景", width=12, command=lambda: replace_bg('#ffffff', '白背景'))

button1.grid(row=1, column=0, padx=20)
result_label.grid(row=1, column=1, pady=5)
entry1.grid(columnspan=2, row=2, column=0, padx=10, pady=5) 
button6.grid(row=7, column=0, padx=5, pady=5)
button7.grid(row=7, column=1, padx=5, pady=5)
button8.grid(row=9, column=0, padx=5, pady=5)
button5.grid(row=9, column=1, padx=5, pady=5)

window.mainloop()

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 抠图和更背景是图像处理中的两个常见任务。Python中有许多图像处理库,可以帮助我们完成这些任务,其中最常用的是OpenCV和PIL。 抠图可以分为基于颜色和基于形状的方法。基于颜色的方法是通过选择颜色范围来分离前景和背景。基于形状的方法是通过选择前景和背景的边界来分离它们。 以下是使用OpenCV和PIL进行抠图和更背景的简单示例: ```python import cv2 from PIL import Image # 抠图 def remove_background(img_path): img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, thresh = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY) contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnt = max(contours, key=cv2.contourArea) x, y, w, h = cv2.boundingRect(cnt) foreground = img[y:y+h, x:x+w] return foreground # 更背景 def change_background(foreground_path, background_path, output_path): foreground = Image.open(foreground_path) background = Image.open(background_path).resize(foreground.size) background.paste(foreground, (0, 0), foreground) background.save(output_path) # 使用示例 foreground_path = 'path/to/foreground.png' background_path = 'path/to/background.png' output_path = 'path/to/output.png' foreground = remove_background(foreground_path) foreground.save('path/to/foreground.png') change_background('path/to/foreground.png', background_path, output_path) ``` 在此示例中,我们使用OpenCV提取前景,并使用PIL将前景粘贴到背景上。要使用此代码,您需要安装OpenCV和Pillow(PIL)库。 ### 回答2: Python视频抠图背景是指使用Python编程语言对视频中的对象进行抠图,并将其替为不同的背景。 首先,我们需要使用Python中的图像处理库(如OpenCV)来从视频中提取每一帧图像。然后,我们将使用图像分割算法(如GrabCut算法)来识别和分离图像中的前景和背景。 一旦我们成功地将图像中的前景与背景分开,我们可以使用图像处理技术(如图像融合)将对象从原始背景中移除,并将其贴在新的背景上。 为了实现这个过程,我们可以按照以下步骤进行操作: 1. 导入所需的库,如OpenCV。 2. 从视频中获取每一帧图像。 3. 对每一帧图像进行图像分割,将前景和背景分离出来。 4. 使用图像处理技术将前景与新的背景进行融合。 5. 将处理后的图像保存为视频文件。 值得注意的是,在实际处理视频时,由于视频具有多个帧图像,我们需要对每一帧都进行处理,并将其合并为一个新的视频文件。 总结起来,Python视频抠图背景可以通过使用图像处理库和技术,将视频中的对象与背景进行分割和替,从而实现。这为我们提供了广阔的应用领域,例如影视后期制作、虚拟现实等。 ### 回答3: Python的视频抠图背景是使用图像处理技术来实现的。具体步骤如下: 1. 首先,我们需要使用Python的图像处理库(如OpenCV)来读取视频,并提取视频中的每一帧图像。 2. 接着,将每一帧的图像进行背景抠图。可以使用图像分割算法(如GrabCut算法)来实现。该算法能够根据用户给定的初始前景和背景区域,自动分割出前景和背景。 3. 抠图后,将前景图像保存,并继续处理下一帧图像。 4. 接下来,我们需要准备一个新的背景图像。可以选择一张静态图片作为新的背景,或者使用视频中的某一帧图像作为新的背景。 5. 将前景图像与新的背景图像进行融合。可以使用图像合成技术(如透明度混合)来实现。这样就可以将前景图像放置在新的背景之上。 6. 最后,将融合后的图像保存,并继续处理下一帧图像,重复以上步骤,直到处理完所有帧。 使用Python进行视频抠图背景可以实现很多有趣的效果,如去除原视频的背景,替为自定义的背景,或者将特定物体提取出来,放置到不同的环境中。这样可以为视频增加视觉吸引力,增强用户的观赏体验。同时,Python作为一种简洁易用的编程语言,具有丰富的图像处理库和算法,使得视频抠图背景变得更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岳涛@心馨电脑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值