iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python图片批量自动抠图去背景的代码详解
  • 152
分享到

Python图片批量自动抠图去背景的代码详解

2024-04-02 19:04:59 152人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

今天发现个好东西啊,叫片刻抠图,是一个在线对图片自动抠图去除背景的网站。只要上传图片,就可以自动把背景去掉把目标对象抠出来。 不管是动物、汽车或各种产品,还是人物,都可以全自动做到令

今天发现个好东西啊,叫片刻抠图,是一个在线对图片自动抠图去除背景的网站。只要上传图片,就可以自动把背景去掉把目标对象抠出来。

不管是动物、汽车或各种产品,还是人物,都可以全自动做到令人惊艳的抠图效果!而且还说可以做到发丝级 ai 自动抠图,作为一个头发存留不多的程序员,突然莫名感觉到一丝来自这个世界的恶意。

这个抠图有什么用?比如可以把人物抠出来换个背景:

也可以把产品抠出来做成新的商品宣传图:(做电商的朋友肯定懂)

这么好用的东西,现在最关键的是:完全免费!

emmmmmm,这个消息被我的几十个前任女友知道了,她们纷纷发来照片,要我给她把照片背景给去掉,把她美美的人像给抠出来,之后好换上马尔代夫的背景。

这么多的图片要一张张传上去,再下载回来,同样的事情做几十遍那我肯定不会做的。

那么,必须要写个 python 自动化脚本程序来搞定了。

说干就干,二话不说就掏出网页自动化的神器selenium,写简单几行代码:

"""
Selenium是第三方库,需要先安装,在Teminal里执行:pip install selenium
驱动程序 chromedriver 需要根据浏览器 chrome 的版本下载
有问题的可以加我:youbafu  (全网统一id)
from selenium import WEBdriver
from selenium.webdriver.chrome.service import Service

s = Service(r'D:\driver\chromedriver.exe')
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome(service=s)
# 打开 片刻抠图
browser.get(r'https://www.pickwant.com')

就完成了自动打开网页:

但这是远远不够的,我们需要实现自动上传图片,然后自动下载。

通过几次手动操作得出规律,我们只要进入到编辑界面

然后循环执行以下步骤:

1、点击网页右上角的重新上传按钮。

2、选择要上传的图片,点打开按钮。

3、等几秒抠好图后,点网页右上角下载按钮。

4、弹出对话框后,再点确认下载就会自动保存图片。

就可以依次把文件夹里的前女友们的图片完成自动抠图了。

要做出自动化脚本,接下来就是找到这些按钮,然后模拟点击就可以了。在重新下载按钮上点鼠标右键,在弹出的菜单中点检查,弹出了网页的元素查看界面,再重复操作一次,就定位到了这个按钮的网页代码:

可以看到重新上传是个 span ,这里可以取它的上级 div,它的class是border_wrap upload_wrap,那么就可以写代码定位到这个元素,然后执行click()操作了。

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

s = Service(r'D:\driver\chromedriver.exe')
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome(service=s)
# 打开 片刻抠图
browser.get(r'Https://www.pickwant.com/#/editor')
time.sleep(1)
# 定位到 重新上传 按钮
upload = browser.find_element(By.CSS_SELECTOR, '.border_wrap.upload_wrap')
upload.click()

这里要特别说明的是,根据 CSS 的基本语法,id用#表示,class用.来表示,如果中间有空格也是用.来拼接,下级标签用>来拼接。

<div data-v-0373fdbc="" class="border_wrap upload_wrap"></div>

对于这样的 div 标签,其class是 border_wrap upload_wrap ,所以 By.CSS_SELECTOR 的查找元素的参数就是 ‘.border_wrap.upload_wrap’ 。

代码执行后,弹出一个选择文件的对话框:

这时候问题来了,这个对话框是 windows 系统级别的,不受Selenium控制,怎么办?

不要慌,这难不倒霸夫老师,既然是 Windows 系统弹窗,那总得受系统控制吧!

那就祭出 pywin32 库来对付它,在终端命令行(Terminal)里输入命令安装库:

pip install pywin32

然后再打开查看 Windows 窗口信息的神器spy++,拿到窗口的类名和层次结构关系,就可以写出以下的自动选择文件并点击按钮的函数代码了:

import win32con # win32库里包含了很多模块
import win32gui # 这里导入具体用到的模块
def 上传图片(文件路径):
    dialog = win32gui.FindWindow('#32770', u'打开')  # 对话框
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
    ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
    Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄
    button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 打开按钮
    time.sleep(0.5)
    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 文件路径)  # 往输入框输入绝对地址
    time.sleep(0.5)
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点 打开 按钮
    time.sleep(5)

先写好这个函数备用,等下要上传哪张图片,只要调用函数时把图片的文件路径作为参数传入,就可以完成目标了。

上传图片后,只要稍等一两秒就自动完成抠图了。这时候再点网页右上角下载按钮,等弹出对话框后,再点确认下载就会自动保存图片。

前面我们学习了定位元素的方法了,再定位这两个按钮对我们来说不是什么困难了。

但是,你都能坚持看到这里了,霸夫老师必须要教你个更牛X的更方便的技巧了:

下载按钮上点鼠标右键,在弹出的菜单中点检查,弹出了网页的元素查看界面,再重复操作一次,就定位到了这个按钮的网页代码。然后在它的上一级的这个div标签上点鼠标右键,选择Copy,再选择Copy selector

然后回到Python代码编辑窗口,粘贴就可以获得准确的定位参数:

#app > div > div:nth-child(1) > div.col-md-12.wonx_row.top_bar > div.border_wrap.download_wrap

这样就省去了辛辛苦苦去理解和转化参数,大大提高效率,接下来就可以轻松写出定位元素和点击的代码:

download = browser.find_element(By.CSS_SELECTOR, '#app > div > div:nth-child(1) > div.col-md-12.wonx_row.top_bar > div.border_wrap.download_wrap')
download.click() # 点击 下载
time.sleep(0.5)
comfirm = browser.find_element(By.CSS_SELECTOR, '#app > div > div.container > div.dialog-content > div > div.download_wrap')
comfirm.click()  # 点击 确认下载
time.sleep(1)

单张图片的上传和下载流程都写完了,接下来要写个获取文件夹下所有图片的函数,来实现依次把每个前任的图片都完成抠图的任务。

我把她们的照片都放在电脑的 E: 盘下的前任女友这个文件夹里,那么只要读取这个文件夹下的所有图片,依次执行执行一遍上传和下载操作就可以了。

文件夹路径 = r'E:\前任女友'
names = os.listdir(文件夹路径)  # 列举出该目录下所有的文件名
for name in names:
    path = os.path.join(文件夹路径, name)  # 拼接出图片完整路径
    # 点击重新上传() # 等待封装
    上传图片(path)
    # 点击下载() # 等待封装

所有的逻辑都理清楚了,模块也基本写好了,接下来就把代码整合一下,来看完整代码:

"""
片刻抠图
图片批量自动抠图去背景
作者:有霸夫
有问题请加vx:youbafu
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import win32con
import win32gui
import os

s = Service(r'D:\driver\chromedriver.exe')
# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome(service=s)
# 打开 片刻抠图
browser.get(r'https://www.pickwant.com')
time.sleep(1)
browser.get(r'https://www.pickwant.com/#/editor')
time.sleep(2)
def 点击重新上传():
    while True:
        try:
            # 定位到 重新上传 按钮
            upload = browser.find_element(By.CSS_SELECTOR, '.border_wrap.upload_wrap')
            upload.click()
        except:
            print('请先扫描登录或完成验证码识别')
        else:
            print('点击 重新上传')
            break
        finally:
            time.sleep(1)
def 上传图片(文件路径):
    dialog = win32gui.FindWindow('#32770', u'打开')  # 对话框
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
    ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
    Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄
    button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 打开按钮
    if Edit is not None and button is not None:
        time.sleep(0.5)
        win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 文件路径)  # 往输入框输入绝对地址
        print('上传:', 文件路径)
        win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点 打开 按钮
        time.sleep(5)
def 点击下载():
            download = browser.find_element(By.CSS_SELECTOR, '.border_wrap.download_wrap')
            download.click()
            time.sleep(0.5)
            confirm = browser.find_element(By.CSS_SELECTOR, '.dialog-content>.content_wrap>.download_wrap')
            confirm.click()
            print('点击 下载')
文件夹路径 = r'E:\前任女友'
names = os.listdir(文件夹路径)  # 列举出该目录下所有的文件名
for name in names:
    path = os.path.join(文件夹路径, name)  # 拼接出图片完整路径
    点击重新上传()
    上传图片(path)
    点击下载()
print('恭喜!全部完成')

在完整代码中加入了异常处理,如果遇到需要扫码登录或者验证码,手动操作一下,还会继续执行下去的。

到此这篇关于Python图片批量自动抠图去背景的文章就介绍到这了,更多相关Python批量自动抠图去背景内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python图片批量自动抠图去背景的代码详解

本文链接: https://www.lsjlt.com/news/143756.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python图片批量自动抠图去背景的代码详解
    今天发现个好东西啊,叫片刻抠图,是一个在线对图片自动抠图去除背景的网站。只要上传图片,就可以自动把背景去掉把目标对象抠出来。 不管是动物、汽车或各种产品,还是人物,都可以全自动做到令...
    99+
    2024-04-02
  • 怎么用Python代码批量抠图
    这篇文章主要讲解了“怎么用Python代码批量抠图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python代码批量抠图”吧!1.准备为了实现这个实验,Python是必不可少的,如果你...
    99+
    2023-06-16
  • Python用20行代码实现批量抠图功能
    目录前言1.准备2.编写代码3.结果分析前言 抠图前 vs Python自动抠图后 在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐...
    99+
    2024-04-02
  • html设置背景图片的代码怎么写
    这篇文章主要介绍html设置背景图片的代码怎么写,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!html设置背景图片的代码是:“<body background="图片地址"></...
    99+
    2023-06-14
  • Python批量裁剪图片的思路详解
    目录需求思路程序测试需求 我的需求是批量裁剪某一文件夹下的所有图片,并指定裁剪宽高。 思路 1、 先使用PIL.Image.size获取输入图片的宽高。2、宽高除以2得到中心点坐标3...
    99+
    2024-04-02
  • 如何使用五行Python代码轻松实现批量抠图
    目录前言准备工作代码实现补充:可能遇到的坑总结前言 你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游? 专业点的人使用 Pho...
    99+
    2024-04-02
  • Python批量改变图片名字的示例代码
    目录一、系统自带的快捷改名二、用Python按要求改名三、在原有的图片上进行修改总结一、系统自带的快捷改名 1、打开对应的图片文件 2、全选后右击重命名 3、输入:Cat 注意...
    99+
    2024-04-02
  • python批量压缩图片的脚本代码分享
    本篇文章和大家了解一下python批量压缩图片的脚本代码分享。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介用Python批量压缩图片,把文件夹或图片直接拖入即可需要 NeedsPython 3Pillow (用pip...
    99+
    2023-06-15
  • 1行Python代码实现去除图片水印详解
    目录正文一、代码运行,效果演示运行以下代码实现的效果如下二、已有功能正文 最近小明在开淘宝店,需要给自己的原创图片加水印,于是我上次给她开发了增加水印的功能:图片加水印,保护原创图...
    99+
    2023-03-19
    Python一行代码去水印 Python图片去水印
  • Python批量生成字幕图片的方法详解
    目录说明前提放码说明 视频剪辑时需要为视频添加字幕,添加字幕方法之一:根据字幕文本文件批量生成透明底只有字幕内容的图片文件,如下图,然后将这些图片文件添加到视频剪辑软件轨道中。 于...
    99+
    2024-04-02
  • Python自动爬取图片并保存实例代码
    目录一、准备工作二、代码实现 三、总结一、准备工作 用python来实现对百度图片的爬取并保存,以情绪图片为例,百度搜索可得到下图所示 f12打开源码 在此处可以看到这...
    99+
    2024-04-02
  • 一文详解如何使用Python批量拼接图片
    目录前言〇、准备工作,PIL库安装使用pip安装一、简单程序实现二、更复杂情况总结前言 当需要将多张图像拼接成一张更大的图像时,通常会用到图片拼接技术。这种技术在许多领域中都有广泛的...
    99+
    2023-05-19
    python多图拼接 python拼接图片 python图片拼图
  • Python批量处理图片大小尺寸方法详解
    目录前言简单讲解1、建目录2、图片大小修改批量修改图片Size1、目录处理2、图片批量修改Size完整代码前言 出发点,网上下了一批png,使用wxFormBuilder做软件工具栏...
    99+
    2022-11-13
    Python批量处理图片 Python批量处理图片尺寸 Python处理图片大小
  • 如何编写浏览器全屏显示背景图片的代码
    这篇文章主要介绍“如何编写浏览器全屏显示背景图片的代码”,在日常操作中,相信很多人在如何编写浏览器全屏显示背景图片的代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何编写...
    99+
    2024-04-02
  • 如何实现背景图片自适应浏览器分辨率大小并自动拉伸全屏代码
    这篇文章主要介绍“如何实现背景图片自适应浏览器分辨率大小并自动拉伸全屏代码”,在日常操作中,相信很多人在如何实现背景图片自适应浏览器分辨率大小并自动拉伸全屏代码问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2024-04-02
  • 如何解决PNG图片在IE6中背景不透明的CSS与JS代码
    今天小编给大家分享一下如何解决PNG图片在IE6中背景不透明的CSS与JS代码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有...
    99+
    2024-04-02
  • 如何使用python对图片进行批量压缩详解
    目录前言使用Python和Pillow模块压缩图片1、优化flag2、渐进式JPEG3、JPEG动态质量使用Python和Selenium模块操纵Squoosh批量压缩图片Pytho...
    99+
    2024-04-02
  • C#实现批量给图片添加水印的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() ...
    99+
    2022-12-09
    C#批量图片添加水印 C#图片添加水印 C# 添加水印
  • PNG图片在IE6中背景不透明的CSS与JS代码怎么写
    本篇内容主要讲解“PNG图片在IE6中背景不透明的CSS与JS代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PNG图片在IE6中背景不透明的CSS与J...
    99+
    2024-04-02
  • Python实现Gif图片分解的示例代码
    目录1、模块安装2、模块导入3、分解动图4、批量分解5、生成效果在前面做过一个Gif图片合成的小工具,老朋友应该有所印象。但是,近段时间有人反映合成了的Gif图片该如何进行分解呢? ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作