Python用5行代码实现批量抠图的示例代码


Posted in Python onApril 14, 2020

前言

对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图。不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠取人像。

效果展示

开始吧,我也不看好什么自动抠图,总觉得不够精确,抠不出满意的图。下面我就直接展示一下效果图吧。我们先看看原图

Python用5行代码实现批量抠图的示例代码

这张图片背景未纯色,我们平时用PhotoShop抠起来也比较简单,对我们计算机来说也不是什么难题,下面是效果图:

Python用5行代码实现批量抠图的示例代码

因为本身是PNG图片,而且原图是白色背景,所以看不出什么区别。为了显示效果,我把原图和抠好的图放到一张黄色背景图片上:

Python用5行代码实现批量抠图的示例代码

这样一看效果明显多了,感觉抠图效果还是非常好的。但是吧,抠这种简单的图片,不怎么过瘾,我们再来看看复杂一点的图片:

Python用5行代码实现批量抠图的示例代码

这张图片背景色比之前复杂一些,而且有渐变,我们来看看抠图后的效果如何:

Python用5行代码实现批量抠图的示例代码

这个原图背景不是白色,我就不弄黄色背景了,赶紧这个效果也还算满意,那么多人物的图片呢,我们再看看下面这张图片:

Python用5行代码实现批量抠图的示例代码

这里有三个人,我们看看程序能不能自动抠出来:

Python用5行代码实现批量抠图的示例代码

虽然是有点瑕疵,不过还是很不错了,下面我们看看最后一个例子:

Python用5行代码实现批量抠图的示例代码

这个就比前面的都复杂的多,那么效果如何呢,我们来看看:

Python用5行代码实现批量抠图的示例代码

哈哈,不仅识别出了人,还把火炬识别出来并抠了出来。总的来说,在完成人物抠图方面还是没有什么问题的。

环境

看完效果,那么应该怎么实现呢?这就需要用到paddlepaddle了,那paddlepaddle是什么呢?paddlepaddle是一个开源的深度学习工具,我们使用该工具可以仅用十几行代码实现迁移学习。在使用之前,我们先来安装paddlepaddle,我们可以进入官网https://www.paddlepaddle.org.cn/,官网上用安装指引。为了方便,这里直接使用pip安装CPU版本的。
我们执行下列语句:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

安装完成后我们可以在环境中测试一下是否成功。我这里使用命令行窗口,先运行python.exe(前提是你已经配置了环境变量)

C:\Users\zaxwz>python

然后在程序中运行如下代码:

Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import paddle.fluid
>>> paddle.fluid.install_check.run_check()

如果控制台显示Your Paddle is installed successfully! Let's start deep Learning with Paddle now就代表我们已经安装成功了。另外我们还需要安装paddlehub:

pip install -i https://mirror.baidu.com/pypi/simple paddlehub

下面我们就可以开始写代码了。

实现抠图

实现抠图的代码很简单,大概分为下面几个步骤:

  • 导入模块
  • 加载模型
  • 获取文件列表
  • 抠图

实现起来没有什么难度,为了方便读代码,我将代码写清楚一点:

# 1、导入模块
import os
import paddlehub as hub

# 2、加载模型
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')

# 3、获取文件列表
# 图片文件的目录
path = 'D:/CodeField/Workplace/PythonWorkplace/PillowTest/11_yellow/img/'
# 获取目录下的文件
files = os.listdir(path)
# 用来装图片的
imgs = []
# 拼接图片路径
for i in files:
  imgs.append(path + i)
#抠图
results = humanseg.segmentation(data={'image':imgs})

我们在控制台运行一下这个程序:

D:\CodeField\Workplace\PythonWorkplace\PillowTest\11_yellow>python 抠图.py
[2020-03-10 21:42:34,587] [ INFO] - Installing deeplabv3p_xception65_humanseg module
[2020-03-10 21:42:34,605] [ INFO] - Module deeplabv3p_xception65_humanseg already installed in C:\Users\zaxwz\.paddlehub\modules\deeplabv3p_xception65_humanseg
[2020-03-10 21:42:35,472] [ INFO] - 0 pretrained paramaters loaded by PaddleHub

运行完成后,我们可以在项目下看到humanseg_output目录,抠好的图片就会存放在该目录下。当然了,上面的代码我们在获取文件列表的操作还可以简化一下:

import os, paddlehub as hub
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')		# 加载模型
path = 'D:/CodeField/Workplace/PythonWorkplace/PillowTest/11_yellow/img/'	# 文件目录
files = [path + i for i in os.listdir(path)]	# 获取文件列表
results = humanseg.segmentation(data={'image':files})	# 抠图

到此这篇关于Python用5行代码实现批量抠图的示例代码的文章就介绍到这了,更多相关Python 批量抠图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python基于DES算法加密解密实例
Jun 03 Python
Python 加密的实例详解
Oct 09 Python
python:print格式化输出到文件的实例
May 14 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
python实现二维数组的对角线遍历
Mar 02 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
python通过matplotlib生成复合饼图
Feb 06 Python
Python 内置函数速查表一览
Jun 02 Python
在jupyter notebook中调用.ipynb文件方式
Apr 14 #Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 #Python
Python使用pyyaml模块处理yaml数据
Apr 14 #Python
Jupyter Notebook打开任意文件夹操作
Apr 14 #Python
Python requests模块cookie实例解析
Apr 14 #Python
Python requests模块session代码实例
Apr 14 #Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 #Python
You might like
分享一个php 的异常处理程序
2014/06/22 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
Python实现拼接多张图片的方法
2014/12/01 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
python可视化实现代码
2019/01/15 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
模具设计与制造专业推荐信
2014/02/16 职场文书
好媳妇事迹材料
2014/12/24 职场文书
校车安全管理责任书
2015/05/11 职场文书
消夏晚会主持词
2015/06/30 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
Windows server 2012搭建FTP服务器
2022/04/29 Servers