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根据日期返回星期几的方法
Jul 06 Python
Python利用IPython提高开发效率
Aug 10 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
python实现简单银行管理系统
Oct 25 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
pytorch构建多模型实例
Jan 15 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Python如何读取、写入CSV数据
Jul 28 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python爬虫请求头的使用
Dec 01 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完整的日历类(CLASS)
2006/11/27 PHP
mac下安装nginx和php
2013/11/04 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
Python_LDA实现方法详解
2017/10/25 Python
vscode 远程调试python的方法
2017/12/01 Python
Django自定义manage命令实例代码
2018/02/11 Python
python实现网页自动签到功能
2019/01/21 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
经典公益广告词
2014/03/13 职场文书
开门红主持词
2014/04/02 职场文书
空气环保标语
2014/06/12 职场文书
幼儿老师求职信
2014/06/30 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
领导干部考核评语
2015/01/04 职场文书
升学宴学生致辞
2015/07/27 职场文书
运动会致辞稿
2015/07/29 职场文书
调解协议书范本
2016/03/21 职场文书
Spring Boot实现文件上传下载
2022/08/14 Java/Android