com技术内幕 代码_CFan科学院:零门槛极速抠图技术探秘

将照片中的人或物从背景中分离出来,俗称抠图。要实现完美的抠图,没有一定的PS(Photoshop)基础是根本无法实现的,不过现在有个名为Remove.bg的网站,号称5秒钟就可以完成复杂的抠图,彻底将抠图难度降到了零门槛!这个工具到底是怎么实现极速抠图的呢?让我们一探其背后的技术内幕。

抠图曾经是技术活

平时我们拍摄的图片,前景的人或物往往是和作为背景的风景紧密结合在一起的,要想实现精准抠图并不容易,需要经过一系列精细的操作(图1)。

95f17f08d6b42dc9b6fb4a6a126d3799.png

图1 抠图步骤图解

我们以通道抠头发丝操作为例。首先需要找出对象最清晰的通道,接着复制通道,再对通道的色阶进行调整,然后使用画笔工具涂抹人物以及需要的头发部分,最后进行反向选择、图层复制等操作才能完成一次抠图操作(图2)。过程中,因为头发丝比较细小而且混乱,光是涂抹选取就需要花费大量的时间。

7a5b52d717f7a9811ccfe6f0285b5cb3.png

图2 通道抠图操作

除了上面的介绍外,如果抠取复杂背景的图片,还可能需要多种工具结合在一起使用,这就必须了解蒙版、通道、快速选择、图层模式等等知识。正是因为抠图的专业性很强,因此对于普通人来说要想熟练掌握抠图技巧,就得反复不断的练习,这绝对是件技术活。

极速抠图让普通人变身PS大神

大部分人并没有时间花费在抠图学习上,所以各种抠图工具应运而生,其中比较引人注目的是新近出现的Remove.bg网站,他们声称可以将这个复杂的技术活零门槛化。在网站的演示中可以看到,即使是类似头发丝的高难度抠图操作,通过网站的处理也可以轻松完成(图3)。

d5231ae38b9788ed2722a5962f71dc54.png

图3 网站抠图演示

Remove.bg的极速抠图,其实是借助具有深度学习功能的Python工具来实现的。Python是一种程序开发语言,经常被设计用于编写自动化脚本(Shell),通过一系列的脚本代码实现很多自动操作,抠图便是它在图像领域中的一个典型应用(图4)。

f7cf52b7ee337547073a897703dc453e.png

图4 Python语言

在Python抠图处理的脚本中,脚本代码首先选定要抽取对象的区域,通过一定的算法将图像识别为区域内(前景)和区域外(背景)两部分。接着基于选定区域,其中的Grabcut算法会对图像背景和前景进行分割,同时循环处理前景内容,将其中的前景提取出来并将背景内容删除,从而实现抠图(图5)。

7e55abdb01ced4d14f5c372d1e3386e6.png

当然仅仅依靠脚本无法完全实现对任意图像背景和前景进行分割,为了能够让脚本有着更高效和精准的处理功能。Remove.bg将Python自动处理脚本和深度机器学习结合起来,为了让脚本可以精准识别出前景物件,开发者预先借助一些机器学习库和Python框架来制定一些算法,如Scikit和Tensorflow机器学习算法。这些算法可以自动检测输入中的模式,这样开发者先将一些图片给算法学习,输入很多前后景混合的人物照片让机器学习。以输入斑马在草原上的照片为例,算法可以将照片中的老虎和草原环境识别出来(图6)。

863aee19ff661e5ef37126cc3903f7ab.png

图6 机器算法

为了让算法拥有更高的识别能力,开发者还准备了很多类似的斑马图片,比如斑马在动物园中、笼子里、树丛中的各种图片供机器学习。利用深度学习和神经网络,通过海量图片的学习和自我纠错,使得机器算法最终对各种照片中的前景后景能精准识别出来。

最后开发者将这套算法生成的模型部署在Remove.bg服务器端,用户只要通过网站上传图片,网站后台的算法就可以实现对照片前景后景的准确识别并实现抠图,用户只需稍等片刻,然后下载处理好的抠图就可以了(图7)。

1d32c5f8687c8c4ee8ae0bb8d760b181.png

图7 Remove.bg抠图流程图解

Python不仅仅会抠图

如上所述,借助Remove.bg网站,普通人通过部署在网站的算法服务就可以实现快速抠图,这样大大降低抠图的技术难度。比如想在朋友圈满足下自己在全球各地的旅游美图,那么只要自拍一张人物照,然后上传抠图,并将抠图贴在国外旅游景点上就OK了。当然也可以进行各种恶搞特效制作。

其实不仅仅是抠图,Python的自动处理脚本还可以应用到更多的领域。比如可以借助脚本对照片中人物脸部的识别,结合人脸识别技术快速在众多的监控照片中提取犯罪嫌疑人照片。再比如将其应用到网站购物上,通过自动识别将各大购物网站同类商品全部提取出来供我们选择、参考,我们的生活将因此而越来越便利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于级联删除和级联修改

曾经因为级联删除的问题浪费了N多时间,顾此在这里写下小小心得,供大家借鉴。在数据库分别建立表t_food(菜单)和表t_book(订单),如下所示:t_food:————————————————————————————…

python:数据库连接操作入门

模块 1 import pymssql,pyodbc 模块说明 pymssql和pyodbc模块都是常用的用于SQL Server、MySQL等数据库的连接及操作的模块,当然一些其他的模块也可以进行相应的操作,类似adodbapi、mssql、mxODBC等,我们在实际用的时候选择其中一个模块就好&…

java面试题:集合_Java:选择正确的集合

java面试题:集合这是在您的应用程序中选择Set , List或Map的正确实现的快速指南。 最好的通用或“主要”实现可能是ArrayList,LinkedHashMap和LinkedHashSet。 它们的整体性能更好,除非您需要其他实现提供的特殊功能,否则应使用它…

c:forEach

简介 <c:forEach>为循环控制&#xff0c;它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时&#xff0c;就会持续重复执行<c:forEach>的本体内容。 语法 语法1&#xff1a;迭代一集合对象之所有成员 <c:forEach [var"varName"] …

b500k带开关电位器内部构造_R138带开关大功率大电流电位器 B10K B500K

全阻值 :500Ω-1MΩ全阻值公差:20%阻抗特性型式:A,B,C,D杂音:Less than 100mV at 20 mmc.绝缘阻抗:More than 10MΩat DC 250V耐电压:1 minute at AC 250V残留阻值:Term.1~2:Less than 10Ω Term.2~3:Less than 10Ω同步误差(双联):-40dB~0dB3dB额定电压B线性:10mm,15mm:AC 100…

Java 8:将匿名类转换为Lambda表达式

将匿名类&#xff08;实现一种方法&#xff09;重构为lambda表达式&#xff0c;可使您的代码更简洁明了。 例如&#xff0c;这是Runnable及其lambda等效项的匿名类&#xff1a; // using an anonymous class Runnable r new Runnable() {Overridepublic void run() {System.o…

如何去掉a标签的下划线

首先来了解下<a>标签的一些样式&#xff1a; <a>标签的伪类样式 一组专门的预定义的类称为伪类&#xff0c;主要用来处理超链接的状态。超链接文字的状态可以通过伪类选择符&#xff0b;样式规则来控制。伪类选择符包括&#xff1a; 总: a 表示所有状态下的连接 …

Android.os.SystemClock

https://www.linuxidc.com/Linux/2011-11/48325p2.htm 文档中对System.currentTimeMillis()进行了相应的描述&#xff0c;就是说它不适合用在需要时间间隔的地方&#xff0c;如Thread.sleep, Object.wait等&#xff0c;因为可以通过System.setCurrentTimeMillis来改变它的值。要…

批量修改数据_#泰Q头条#065期 四步搞定Excel表中的批量数据修改

『闻道有先后 术业有专攻』又到每周五我们Offcie小课堂时间&#xff0c;每周学一点儿&#xff0c;知识从未如此简单&#xff0c;也真诚的希望各位能在留言板写下你们宝贵的建议&#xff0c;给您带来更具价值的分享。这期跟大家带来的Excel表数据整理功能——统一数值变动的实用…

列表与for循环

列表(list)&#xff1a; python基础数据类型之一&#xff1a;其他语言中也有列表的概念。可索引&#xff0c;可切片&#xff0c;可加长。 列表可以储存大量数据。 #作用&#xff1a;多个装备&#xff0c;多个爱好&#xff0c;多门课程&#xff0c;多个女朋友等#定义&#xff1a…

html用a标签怎么提交表单?

html用a标签怎么提交表单&#xff1f; 2011-03-08 10:55MeACrazy | 分类&#xff1a;Html/Css |浏览10003次如下代码请 帮忙完善 function judgeDelete(){if(confirm("确定要删除吗&#xff1f;")){window.location.href"doDelete.jsp";}}<form action&…

python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

(1)利用python GDAL库读写geotiff格式的遥感影像方法&#xff0c;具有很好的参考价值&#xff0c;不错&#xff01;from osgeo import gdalimport numpy as npdef read_tiff(inpath):dsgdal.Open(inpath)rowds.RasterXSizecolds.RasterYSizebandds.RasterCountgeoTransformds.G…

滑动拼图验证码操作步骤:_拼图项目:延期的后果

滑动拼图验证码操作步骤&#xff1a;Mark Reinhold先生于2012年7月宣布 &#xff0c;他们计划从Java 8撤消Jigsaw项目 &#xff0c;因为Jigsaw计划于2013年9月&#xff08;从现在开始一年&#xff09;推迟其发布。 这个日期是众所周知的&#xff0c;因为Oracle已决定实施Java的…

Vue页面骨架屏(一)

在开发webapp的时候总是会受到首屏加载时间过长的影响&#xff0c;主流的解决方法是在载入完成之前显示loading图效果&#xff0c;而一些大公司会配置一套服务端渲染的架构来解决这个问题。考虑到ssr所要解决的一系列问题&#xff0c;越来越多的APP采用了“骨架屏”的方式去提升…

mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

SQL 包含以下 4部分&#xff1a;1数据定义语言(DDL)&#xff1a;DROP、CREATE、ALTER 等语句。2数据操作语言(DML)&#xff1a;INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。3数据查询语言(DQL)&#xff1a;SELECT 语句。4 数据控制语言(DCL): GRANT、REVOKE、COMMIT、ROLLB…

Page directive: illegal to have multiple occurrences of contentType with different values

org.apache.jasper.JasperException: /commons/meta.jsp(1,1) PWC5988: Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html; charsetutf-8, new: text/html;charsetUTF-8) 问题&#xff1a;contentType 有多个值 解…

我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

97&#xff05;的记录错误是由10个唯一错误引起的 在2016年&#xff0c;一件事已经30年没有改变了。 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除。 由于某些未知原因&#xff0c;我们隐式地信任日志文件&#xff0c;因为我们认为事实隐藏在其中。 如果您足够努力…

洛谷 P1939 【模板】矩阵加速(数列)

题目描述 a[1]a[2]a[3]1 a[x]a[x-3]a[x-1] (x>3) 求a数列的第n项对1000000007&#xff08;10^97&#xff09;取余的值。 输入输出格式 输入格式&#xff1a; 第一行一个整数T&#xff0c;表示询问个数。 以下T行&#xff0c;每行一个正整数n。 输出格式&#xff1a; 每行输出…

Java中Map的使用

Map以按键/数值对的形式存储数据&#xff0c;和数组非常相似&#xff0c;在数组中存在的索引&#xff0c;它们本身也是对象。 Map的接口 Map&#xff0d;&#xff0d;&#xff0d;实现Map Map.Entry&#xff0d;&#xff0d;Map的内部类&#xff0c;描述Map中的按键/数值…

java获取10位随机数_Java基础:JAVA中BitSet使用详解

适用场景&#xff1a;整数&#xff0c;无重复&#xff1b;Bitset 基础Bitset&#xff0c;也就是位图&#xff0c;由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c库中bitset的一张图。基本原理是&#xff0c;用1位来表示一个数据是…