精华内容
下载资源
问答
  • 这款抠图工具有两种简单方式: 1、在线抠图 2、API代码抠图 二、在线抠图 1、打开remove.bg网站首页,可以上传本地图片,也可以选择网络图片的URL链接。 2、上传几秒后,就可以看到无背景透明图了。 3、可以对图像...
  • 别再自己抠图了,Python用5行代码实现批量抠图

    万次阅读 多人点赞 2020-03-10 21:48:10
    前言 对于会PhotoShop的人来说,弄一张证件照还是非常简单的,但是还是有许多人不会PhotoShop的。今天就给你们带来一个非常简单的方法,...要是之前我对抠图是束手无策的,但是前几天发现了深度学习开发工具PaddleH...

    前言

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

    效果展示

    开始吧,我也不看好什么自动抠图,总觉得不够精确,抠不出满意的图。下面我就直接展示一下效果图吧。我们先看看原图
    在这里插入图片描述
    这张图片背景未纯色,我们平时用PhotoShop抠起来也比较简单,对我们计算机来说也不是什么难题,下面是效果图:
    在这里插入图片描述
    因为本身是PNG图片,而且原图是白色背景,所以看不出什么区别。为了显示效果,我把原图和抠好的图放到一张黄色背景图片上:
    在这里插入图片描述
    这样一看效果明显多了,感觉抠图效果还是非常好的。但是吧,抠这种简单的图片,不怎么过瘾,我们再来看看复杂一点的图片:
    在这里插入图片描述
    这张图片背景色比之前复杂一些,而且有渐变,我们来看看抠图后的效果如何:
    在这里插入图片描述
    这个原图背景不是白色,我就不弄黄色背景了,赶紧这个效果也还算满意,那么多人物的图片呢,我们再看看下面这张图片:
    在这里插入图片描述
    这里有三个人,我们看看程序能不能自动抠出来:
    在这里插入图片描述
    虽然是有点瑕疵,不过还是很不错了,下面我们看看最后一个例子:
    在这里插入图片描述
    这个就比前面的都复杂的多,那么效果如何呢,我们来看看:
    在这里插入图片描述
    哈哈,不仅识别出了人,还把火炬识别出来并抠了出来。总的来说,在完成人物抠图方面还是没有什么问题的。

    环境

    看完效果,那么应该怎么实现呢?这就需要用到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. 导入模块
    2. 加载模型
    3. 获取文件列表
    4. 抠图

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

    # 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})	# 抠图
    

    最后送大家一套2020最有趣的Pyhon项目实战视频教程,地址https://docs.qq.com/doc/DVFlFQW5HTVZPbnNN进去拿

    展开全文
  • Python实现抠图给证件照换背景

    千次阅读 2018-12-11 14:37:44
    场景 此功能主要是用来学习用法,功能...导入一些工具包 opencv(cv2),用于图像处理 numpy,用于数据计算。 matplotlib用于出图。 import cv2 import numpy as np import matplotlib.pyplot as plt 新建显示...

    场景

    此功能主要是用来学习用法,功能不重要,学会了用法,其他功能自己开发。

    效果

    原证件照

    背景图

    合成效果

    实现

    导入一些工具包

    opencv(cv2),用于图像处理

    numpy,用于数据计算。

    matplotlib用于出图。

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt

    新建显示照片函数

    def show(image):
        plt.imshow(image)
        plt.axis('off')
        plt.show()

    导入证件照

    img=cv2.imread('font.jpg') #图片导入
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #转换颜色模型
    print(img.shape) #打印图片规格
    show(img) #显示图片

    导入背景图

    back_img = cv2.imread('back.jpg') #图片导入
    back_img = cv2.cvtColor(back_img,cv2.COLOR_BGR2RGB) #转换颜色模型
    print(back_img.shape) #打印图片规格
    show(back_img) #显示图片

     

    裁剪图片

    #img = img[0:1000,150:550] #裁剪图片大小
    #show(img) #显示图片
    
    数值可以自己调整,根据自己照片的具体大小调整,
    
    将没用的内容裁剪掉。

    缩放图片

    这里选择的的图片大小合适,背景图大点,这里是1920*1200

    证件照大小是295*413

    如果大小不合适要进行缩放图片

    下面是示例对证件照进行缩放(假如大小不合适的话)

    #print(img.shape) #打印图片规格
    #img=cv2.resize(img,None,fx=0.9,fy=0.9) #图片缩小10%
    #print(img.shape) #打印图片规格

    这里相当于在原来基础上乘以0.9,即相当于图片缩放10%。

    抠图

    先把图片准换成HSV格式

    img_hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV) #把图片转换成HSV格式,用于抠图
    show(img_hsv) #显示图片

    执行抠图

    lower_blue=np.array([0,0,0]) #获取最小阈值
    upper_blue=np.array([0,255,255]) #获取最大阈值
    mask = cv2.inRange(img_hsv, lower_blue, upper_blue) #创建遮罩
    show(mask) #显示遮罩

    图像腐蚀与膨胀

    erode=cv2.erode(mask,None,iterations=3) #图像腐蚀
    show(erode) #显示图片
    dilate=cv2.dilate(erode,None,iterations=1) #图像膨胀
    show(dilate) #显示图片

    图像合并

    center = [400,800] #设置前景图开始位置
    for i in range(rows):
        for j in range(cols):
            if opening[i,j]==0: #代表黑色
                back_img[center[0]+i,center[1]+j] =img[i,j] #赋值颜色
    show(back_img) #显示图片
    
    back_img = cv2.cvtColor(back_img,cv2.COLOR_RGB2BGR) #图像格式转换
    back_img=cv2.resize(back_img,None,fx=0.8,fy=0.8) #图像缩放20%
    cv2.imwrite('result.png',back_img) #保存图像

    注:设置前景图开始位置时,要根据自己的图片的大小合理地设置前景图位于背景图的位置,这里400与800使其能正好位于差不多居中位置。

    完整代码

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    #建立显示图片的函数
    def show(image):
        plt.imshow(image)
        plt.axis('off')
        plt.show()
       
    #导入前景图
    img=cv2.imread('font.jpg') #图片导入
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #转换颜色模型
    print(img.shape) #打印图片规格
    show(img) #显示图片
    
    #导入背景图
    back_img = cv2.imread('back.jpg') #图片导入
    back_img = cv2.cvtColor(back_img,cv2.COLOR_BGR2RGB) #转换颜色模型
    print(back_img.shape) #打印图片规格
    show(back_img) #显示图片
    
    #裁剪图片
    #img = img[0:1000,150:550] #裁剪图片大小
    #show(img) #显示图片
    
    #缩放图片
    #print(img.shape) #打印图片规格
    #img=cv2.resize(img,None,fx=0.9,fy=0.9) #图片缩小10%
    #print(img.shape) #打印图片规格
    
    #拆分图片信息
    rows,cols,channels = img.shape #拆分图片信息
    
    #转换格式
    img_hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV) #把图片转换成HSV格式,用于抠图
    show(img_hsv) #显示图片
    
    #抠图
    lower_blue=np.array([0,0,0]) #获取最小阈值
    upper_blue=np.array([0,255,255]) #获取最大阈值
    mask = cv2.inRange(img_hsv, lower_blue, upper_blue) #创建遮罩
    show(mask) #显示遮罩
    
    erode=cv2.erode(mask,None,iterations=3) #图像腐蚀
    show(erode) #显示图片
    dilate=cv2.dilate(erode,None,iterations=1) #图像膨胀
    show(dilate) #显示图片
    
    opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8,8))) #开运算
    show(opening) #显示图片
    
    center = [400,800] #设置前景图开始位置
    for i in range(rows):
        for j in range(cols):
            if opening[i,j]==0: #代表黑色
                back_img[center[0]+i,center[1]+j] =img[i,j] #赋值颜色
    show(back_img) #显示图片
    
    back_img = cv2.cvtColor(back_img,cv2.COLOR_RGB2BGR) #图像格式转换
    back_img=cv2.resize(back_img,None,fx=0.8,fy=0.8) #图像缩放20%
    cv2.imwrite('result.png',back_img) #保存图像

    源码以及文件下载

    https://download.csdn.net/download/badao_liumang_qizhi/10842960


     

     

     

    展开全文
  • 如何用Python抠图?试试scikit-image

    千次阅读 2019-02-20 15:40:50
    作者 | Parul Pandey译者 | 刘旭坤整理 | Jane出品 | Python大本营(公众号 id:pythonnews)《终结者》可谓是上世纪八十年代科幻电...

    640?wx_fmt=jpeg

    作者 | Parul Pandey

    译者 | 刘旭坤

    整理 | Jane

    出品 | Python大本营(公众号 id:pythonnews)


    《终结者》可谓是上世纪八十年代科幻电影中的翘楚。电影中有一段剧情是像下图这样以终结者的第一视角呈现的。我们从图中可以看到终结者能把人和背景进行分割,这在当时还是科幻,但今天图像分割技术已经成了图像处理中很重要的一部分了。


    640?wx_fmt=jpeg

    (图片来源:https://i.imgflip.com/nuf6y.jpg)


    图像分割


    大家如果用过 Photoshop 或者类似的图像编辑软件的话可能都试过抠图,简单地说就是剔除背景只选中图片中的目标人物,这其实就是手动进行了图像分割。有很多图像处理库都可以自动完成图像分割,今天我们就来介绍一下基于 Python 的 scikit-imge。


    完整的代码:

    https://github.com/parulnith/Image-Processing/tree/master/Image%20Segmentation%20using%20Python%27s%20scikit-image%20module


    scikit-image

         

    640?wx_fmt=jpeg


    scikit-image 的主要功能和它的名字描述的一样,就是进行图像处理。


    安装


    可以在命令行输入下面的命令用 pip 或者 conda 来安装 scikit-image:


    
     

    pip install -U scikit-image(Linux and OSX)
    pip install scikit-image(Windows)
    # For Conda-based distributions
    conda install scikit-image


    读取图片


    在介绍具体的图像分割方法之前我们先来看看如何读取图片。


    • 读取 scikit-image 自带的灰度图片


    scikit-image 的 data 模块自带了一些内置的 jpeg 和 png 格式的图片可以同来测似。(skimage 就是 scikit-image)


    
     

    from skimage import data
    import numpy as np
    import matplotlib.pyplot as plt
    image = data.binary_blobs()
    plt.imshow(image, cmap='gray')

         

    640?wx_fmt=png


    • 读取彩色图片     


    
     

    from skimage import data
    import numpy as np
    import matplotlib.pyplot as plt
    image = data.astronaut()
    plt.imshow(image)


    640?wx_fmt=png


    • 读取硬盘上的图片     


    
     

    # The I/O module is used for importing the image
    from skimage import data
    import numpy as np
    import matplotlib.pyplot as plt
    from skimage import io
    image = io.imread('skimage_logo.png')
    plt.imshow(image);


    640?wx_fmt=png


    • 一次读取多张图片


    
     

    images = io.ImageCollection('../images/*.png:../images/*.jpg')
    print('Type:', type(images))
    images.files
    Out[]: Type: <class ‘skimage.io.collection.ImageCollection’>


    • 保存图片

    
     

    #Saving file as ‘logo.png’
    io.imsave('logo.png', logo)


    图像分割


    简单地说来图像分割就是将一张图片分割成不同的部分来简化识别或者用分割后的部分来进行进一步的分析。


    本文中我们主要介绍图像分割中的监督和无监督学习方法。


    640?wx_fmt=png


    这里监督和无监督分割的含义与机器学习中的概念完全相同,指的是算法是否有来自外界的指导。唯一的区别可能就是分割的或称比较直观,所以用户使用无监督分割方法之后进行调试时比较容易。


    图像分割算法中最简单的是阈值分割法。


    阈值分割法的原理非常简单,设定一个阈值,在阈值之上或者之下的所有像素都会被分割出来。如果对象与背景之间存在非常打的反差那么阈值分割法就够用了。


    下面我们就来看一个例子。先把需要用到的库都读进来:


    
     

    import numpy as np
    import matplotlib.pyplot as plt
    import skimage.data as data
    import skimage.segmentation as seg
    import skimage.filters as filters
    import skimage.draw as draw
    import skimage.color as color


    1.使用下面这个函数来显示图片:


    
     

    def image_show(image, nrows=1, ncols=1, cmap='gray'):
        fig, ax = plt.subplots(nrows=nrows, ncols=ncols, figsize=(1414))
        ax.imshow(image, cmap='gray')
        ax.axis('off')
        return fig, ax


    2.调用 image_show 方法:


    
     

    text = data.page()
    image_show(text)


    640?wx_fmt=png


    虽然图片中文字和背景的对比不是很强但还是值得一试。要选择一个合适的阈值我们需要看一下图片的灰度直方图(histogram)。


    直方图显示的是图片中不同灰度像素的个数,比如这张图片是 8 位图,所以横轴亮度的范围是 0 到 255,纵轴则是图片中此亮度像素点的个数。


    
     

    fig, ax = plt.subplots(11)
    ax.hist(text.ravel(), bins=32, range=[0256])
    ax.set_xlim(0256);


    640?wx_fmt=png


    我们可以看到像素在 225 附近出现了集中,这应该是比较接近白色的背景。最理想的情况是在直方图中出现双峰,这样表示目标和背景亮度反差很大所以我们比较好阈值,也就是双峰中间的部分。这张图片中没有双峰所以我们就先试试不同阈值分割的效果如何。


    3.手动选择阈值


    
     

    text_segmented = text > (value concluded from histogram i.e 50,70,120 )
    image_show(text_segmented);


    640?wx_fmt=png

    (阈值为 50)

    640?wx_fmt=png

    (阈值为 70)

    640?wx_fmt=png

    (阈值为 120)


    这三张图中我们将阈值设为 50、70 和 120,但效果都不太好因为图片左侧有一块阴影部分。下面我们再来试试自动选择阈值


    scikit-image 中有一些自动选择阈值的方法,比如 otsu, li, local:


    
     

    text_threshold = filters.threshold_  # Hit tab with the cursor after the underscore to get all the methods.
    image_show(text < text_threshold);


    640?wx_fmt=png

    (otsu)

    640?wx_fmt=png

    (li)


    如果使用 local 方法的话还需要指定一个 block_size 参数。block_size 必须是奇数,这里我们选的是 51。此外还有一个默认值为零的 offset 参数,使用这个参数的目的是降低图片局部的亮度来实现更好的分割效果。


    
     

    text_threshold = filters.threshold_local(text,block_size=51, offset=10
    image_show(text > text_threshold);


    640?wx_fmt=png


    分割出来的效果还是不错的。


    监督式分割


    阈值分割在特定场景中有用,但大部分时候我们都需要使用更高级一些的工具。下面我们就来试试从下面这张图片中把人物的头部分割出来。


    
     

    # import the image
    from skimage import io
    image = io.imread('girl.jpg'
    plt.imshow(image);


    640?wx_fmt=png


    一般来说对图片进行分割之前需要去掉图片中的噪点,但我们用的这张图噪点不多所以这里就跳过除噪点这一步。接下来将图片转化为灰度图:


    
     

    image_gray = color.rgb2gray(image) 
    image_show(image_gray);


    640?wx_fmt=png


    下面我们介绍两种不同原理的分割方法。


    主动轮廓分割 (Active Contour)


    主动轮廓模型也叫 snakes 模型,用户需要把要分割的部分圈起一个轮廓,轮廓会逐渐收缩到目标区域的边界上。


    
     

    def circle_points(resolution, center, radius):
    """
        Generate points which define a circle on an image.Centre refers to the centre of the circle
        """
       
        radians = np.linspace(02*np.pi, resolution)
    c = center[1] + radius*np.cos(radians)#polar co-ordinates
        r = center[0] + radius*np.sin(radians)

        return np.array([c, r]).T
    # Exclude last point because a closed path should not have duplicate points
    points = circle_points(200, [80250], 80)[:-1]


    这里我们先绕着头部画个圈:


    640?wx_fmt=png


    把这些点在图片上画出来看看:


    
     

    fig, ax = image_show(image)
    ax.plot(points[:, 0], points[:, 1], '--r', lw=3)


    接下来我们就可以调用主动轮廓方法来进行分割:


    
     

    snake = seg.active_contour(image_gray, points)
    fig, ax = image_show(image)
    ax.plot(points[:, 0], points[:, 1], '--r', lw=3)
    ax.plot(snake[:, 0], snake[:, 1], '-b', lw=3);


    640?wx_fmt=png


    主动轮廓法有两个参数 alpha 和 beta 用来调整轮廓收缩的速度和轮廓的光滑程度。


    
     

    snake = seg.active_contour(image_gray, points,alpha=0.06,beta=0.3)
    fig, ax = image_show(image)
    ax.plot(points[:, 0], points[:, 1], '--r', lw=3)
    ax.plot(snake[:, 0], snake[:, 1], '-b', lw=3);


    640?wx_fmt=png


    ▌随机游走分割(Random Walker)


    随机游走分割的思想是让用户用几个像素点来对目标和背景进行标记。没有被标记的像素则计算它能随机游走到目标和背景的概率。如果一个像素游走到目标的概率比背景大,就把此像素点归为目标,反之则归为背景。


    这里我们还用主动轮廓里面用过的圆圈来进行标记。


    
     

    image_labels = np.zeros(image_gray.shape, dtype=np.uint8)


    随机游走需要我们把背景和目标都进行标记,所以这里还有一个小圆圈来标记头部。


    
     

    indices = draw.circle_perimeter(80250,20)#from here
    image_labels[indices] = 1
    image_labels[points[:, 1].astype(np.int), points[:, 0].astype(np.int)] = 2
    image_show(image_labels);


    640?wx_fmt=png


    接下来我们调用随机游走方法来看看分割的效果:


    
     

    image_segmented = seg.random_walker(image_gray, image_labels)
    # Check our results
    fig, ax = image_show(image_gray)
    ax.imshow(image_segmented == 1, alpha=0.3);


    640?wx_fmt=png


    边缘部分效果不太好,所以我们还要调整一下参数 beta。试过不同的 beta 值发现beta=3000 的时候效果最好。


    
     

    image_segmented = seg.random_walker(image_gray, image_labels, beta = 3000)
    # Check our results
    fig, ax = image_show(image_gray)
    ax.imshow(image_segmented == 1, alpha=0.3);


    640?wx_fmt=jpeg


    使用监督式分割我们既要标记又要调整参数,虽然效果还行但不可能每张图都这么调一遍。这时就要用到无监督分割。


    无监督式分割


    无监督式分割意味着分割过程不需要人力的干预。假设有一张非常大的图片,像素非常多,多到无法同时进行处理。这种情况下我们就可以用无监督式分割方法将图片分解为区域,将对像素的处理转化为对区域的处理来降低处理的难度。下面我们就来介绍两种无监督式分割方法。


    简单线性迭代聚类(SLIC)


    SLIC 可以看作是 K-Means 在图像分割上的一种应用。主要的思想是将所有的像素点聚类为指定数量的区域。


    SLIC 不需要将图片转化为灰度所以这里我们读原图就可以了:


    
     

    image_slic = seg.slic(image,n_segments=155)


    算法会将每个区域的像素值设置为整个区域像素的均值:


    
     

    # label2rgb replaces each discrete label with the average interior color
    image_show(color.label2rgb(image_slic, image, kind='avg'));


    640?wx_fmt=png


    图像从有 512X512=262000 个像素需要处理转化为只需要处理聚类之后的 155 个区域。


    图论分割(Graph Based Image Segmentation)


    基于图的图像分割方法或称图论分割,是基于最小生成树聚类设计的,但我们没法指定要分割成区域的数目。


    
     

    image_felzenszwalb = seg.felzenszwalb(image) 
    image_show(image_felzenszwalb);


    640?wx_fmt=png


    结果就是图片被分成了超过 3000 个子区域。


    
     

    np.unique(image_felzenszwalb).size
    3368


    下面我们来每个区域的平均值来填上颜色看看效果:


    640?wx_fmt=png


    
     

    image_felzenszwalb_colored = color.label2rgb(image_felzenszwalb, image, kind='avg')
    image_show(image_felzenszwalb_colored);


    颜色可以让我们分辨出不同区域的边界。进一步减少区域的数目可以通过调整 scale 参数来实现,当然也可以用图论分割的结果为基础使用区域邻接图 (RAG) 等方法将区域进行合并来减少区域数目, 这种现象我们称为过分割。


    总结


    图像分割是图像处理中的重要一环,也因为应用范围广泛称为了研究中的一个热点领域。scikit-image 有活跃的社区和大量经过测试的算法,更可贵的是对商业应用并没有做出限制。如果大家感兴趣的话赶快去看看 scikit-image 的文档吧。


    原文链接:

    https://towardsdatascience.com/image-segmentation-using-pythons-scikit-image-module-533a61ecc980


    (本文为Python大本营翻译文章,转载请微信联系 1092722531)


     

    640?wx_fmt=png


    推荐阅读:

    640?wx_fmt=png

    展开全文
  • BackgroundMattingV2 是华盛顿大学几位研究员提出的一种实时、高分辨率的背景替换技术,是基于 Python 实现的。在 4K 分辨率下,该技术的运行速度为 30fps,在现代 GPU 上,高清的运行速度为 60fps。该技术是基于...

    简介

    BackgroundMattingV2 是华盛顿大学几位研究员提出的一种实时、高分辨率的背景替换技术,是基于 Python 实现的。在 4K 分辨率下,该技术的运行速度为 30fps,在现代 GPU 上,高清的运行速度为 60fps。该技术是基于背景抠图,其中一帧额外的背景被捕获并用于恢复前景蒙版和前景层。

    在这里插入图片描述

    简单使用

    项目源码地址

    https://github.com/PeterL1n/BackgroundMattingV2

    项目依赖库
    在这里插入图片描述
    开发者提供的一些文件资源(国内需木弟子):
    1、下载模型/权重文件

    https://drive.google.com/drive/folders/1cbetlrKREitIgjnIikG1HdM4x72FtgBh?usp=sharing

    2、用于练习的视频和图片文件
    HD视频:

    https://drive.google.com/drive/folders/1j3BMrRFhFpfzJAe6P2WDtfanoeSCLPiq

    4K视频和图片:

    https://drive.google.com/drive/folders/16H6Vz3294J-DEzauw06j4IUARRqYGgRD?usp=sharing

    很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:810735403

    项目demo脚本介绍

    • inference_images.py:用于图片中的背景替换,用法如下:

      
      --model-type mattingrefine
      
      --model-backbone resnet50
      
      --model-backbone-scale 0.25
      
      --model-refine-mode sampling
      
      --model-refine-sample-pixels 80000
      
      --model-checkpoint "PATH_TO_CHECKPOINT"
      
      --images-src "PATH_TO_IMAGES_SRC_DIR"
      
      --images-bgr "PATH_TO_IMAGES_BGR_DIR"
      
      --output-dir "PATH_TO_OUTPUT_DIR"
      
      --output-type com fgr pha ```
      
    • inference_video.py: 用于视频中的背景替换,用法如下:

      
      python inference_video.py 
      
      --model-type mattingrefine 
      
      --model-backbone resnet50 
      
      --model-backbone-scale 0.25 
      
      --model-refine-mode sampling 
      
      --model-refine-sample-pixels 80000 
      
      --model-checkpoint "PATH_TO_CHECKPOINT" 
      
      --video-src "PATH_TO_VIDEO_SRC" 
      
      --video-bgr "PATH_TO_VIDEO_BGR" 
      
      --video-resize 1920 1080 
      
      --output-dir "PATH_TO_OUTPUT_DIR" 
      
      --output-type com fgr pha err ref ```
      
    • inference_webcam.py:用于使用网络摄像头下的交互式背景替换,用法如下:

      
      --model-type mattingrefine 
      
      --model-backbone resnet50 
      
      --model-checkpoint "PATH_TO_CHECKPOINT" 
      
      --resolution 1280 720
      
      

    虚拟摄像机

    开发者提供了一个应用插件,通过他们的模型将网络摄像头视频输送到一个虚拟摄像头。该插件仅适用于Linux系统,可以在Zoom视频会议软件中使用。更多详情请查看:

    https://github.com/andreyryabtsev/BGMv2-webcam-plugin-linux

    在Google Colab上体验

    另外,开发者还提供了Google Colab的体验地址(国内需要木弟子),可以体验替换图片和视频中的背景。

    1、图片背景替换体验地址:

    https://colab.research.google.com/drive/1cTxFq1YuoJ5QPqaTcnskwlHDolnjBkB9?usp=sharing

    图片背景替换效果:
    在这里插入图片描述
    2、视频背景替换体验地址:

    https://colab.research.google.com/drive/1Y9zWfULc8-DDTSsCH-pX6Utw8skiJG5s?usp=sharing

    视频背景替换效果:
    在这里插入图片描述
    在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!

    展开全文
  • Python实现自动抠图(上篇)

    万次阅读 多人点赞 2019-07-24 09:29:13
    Python实现自动抠图         生活中,我们经常需要使用到一些图片资源,比如做ppt、项目需要等,这就涉及图片的处理。但抠图是一个痛苦的过程,本人是ps入门级玩家,每次...
  • 抠图完就成这样了,舒服多了~ 3.代码 import os from PIL import Image class Transcolor(): def __init__(self): self.color_map = { 'white': (255, 255, 255, 0), 'black': (0, 0, 0, 0), } ...
  • 3行Python代码实现图像照片抠图和换底色

    千次阅读 多人点赞 2019-10-03 23:01:40
    对于不会PS的小伙伴,抠图是一个难度系数相当高的活儿,某宝照片抠图和证件照换底色均价都是5元RMB,所以今天要介绍的这款神工具,只要 3 行代码 5 秒钟就可以完成高精度抠图,甚至都不用会代码,点两下鼠标就完成了...
  • 使用python抠图

    万次阅读 2017-11-25 13:24:59
    本文主要介绍如何使用python抠图,及抠图的基本原理 效果图 图片 原图 效果图 原理 首先要选定要抽取对象的区域,区域外的部分为背景 基于选定区域,grabCut循环处理前景内容 前景部分...
  • python抠图

    2020-03-24 21:55:06
    python抠图 需要用到paddlepaddle了,那paddlepaddle是什么呢?paddlepaddle是一个开源的深度学习工具,我们使用该工具可以仅用十几行代码实现迁移学习。在使用之前,我们先来安装paddlepaddle,我们可以进入官网...
  • Python实例:一键批量抠图

    千次阅读 2020-05-12 15:05:11
    专业点的人使用 PhotoShop 的“魔棒”工具可以抠图,非专业人士可以使用各种美图 APP 来实现,但是他们毕竟处理能力有限,一次只能处理一张图片,而且比较复杂的图像可能耗时较久。 今天我来向大家展示第三种途径...
  • 线上审批等场景经常会用到手写签名、公司鲜章等,这篇文章介绍的就是如何定位抠图A4纸上的签名和鲜章的,并且可以批量处理。 主要使用opencv进行图像处理,把图像中的文字和印章轮廓处理出来,然后再进行定位裁剪,...
  • 无需PS软件,手动制作自己的抠图工具,在只有一张图片,需要细致地抠出人物的情况下,能帮你减少抠图步骤;在有多张图片需要抠的情况下,能直接帮你输出这些人物的基本轮廓 准备相片: 安装相关的依赖包: ...
  • 工具:paddlehub包和人像抠图模型deeplabv3p_xception65_humanseg 步骤一:安装软件 1.nodepad++ (自行百度安装) 2.python (自行百度安装,要求版本是python3.6及以上,推荐安装python3.7) 步骤二:安装工具包 打开...
  • 1、项目背景 对于不会PS的小伙伴,抠图是一个难度系数想当高的活儿,...这款抠图工具有两种简单方式:在线抠图和Python代码抠图,介绍如下。 2、在线抠图 第1步:登录Remove Image Background官网,上传本地图片或网络
  • "GrabCut":使用迭代图形切割的交互式前景提取工具,用于在分割任务中按像素标记图像数据. OpenCV官网例子 算法过程:  首先,输入矩形框,矩形框外部区域都是背景。内部一定包含前景。  电脑对输入图像...
  • 比PS还好用!Python 20行代码批量抠图

    千次阅读 2020-06-14 16:00:52
    Python能够成为这样的一种工具:在只有一张图片,需要细致地抠出人物的情况下,能帮你减少抠图步骤;在有多张图片需要抠的情况下,能直接帮你输出这些人物的基本轮廓,虽然不够细致,但也够用了。 DeepLabv3+ 是谷歌...
  • 前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者...专业点的人可以使用 PhotoShop 的“魔棒”工具进行抠图,非专业人士则使用各种美图 APP 来实现,但是这两类方式毕竟处理能力
  • 在视频创作过程中,有时会遇到人像抠图的需求,最一般的做法是使用PR、AE等工具将视频中的每一帧图像手动抠图。这么繁琐的步骤在理工男面前简直是不可存在的,那么有什么简单的方法能快速抠图吗?...
  • Python快速实现一键抠图

    千次阅读 多人点赞 2021-06-24 21:10:42
    使用百度深度学习框架paddlepaddle对人像图片进行自动化抠图
  • python removebg 抠图

    千次阅读 2019-08-02 00:57:38
    python removebg 抠图 removebg是一家号称可以5s抠图的网站,支持使用api传入图片文件或图片链接抠图。个人用户每月免费50张,就算有大量图片需要处理,价格真心不高。那么如果利用removebg进行淘宝抠图服务,应该能...
  • 利用Python轻松实现抠图,背景色更换

    千次阅读 2019-07-24 20:40:44
    只需要3行代码,5秒实现高精度抠图 介绍一款工具remove.bg,通过调用此工具的API实现,API获取方式很简单,注册这个工具账号,就可以免费获得了 话不多说,老规矩,直接上代码: import os from removebg import ...
  • 1 VOC标注格式和工具 2 Pytorch的Dataset格式 3 对应的转换脚本 进行目标识别通常需要coco和voc两种数据集格式,本文主要讨论voc格式的使用。 coco 数据集。COCO 的全称是Common Objects in COnte
  • 平时生活工作中,会遇到去掉照片背景的需求,如果你是PS高手,可以用ps解决,如果不是呢,或者对去背景的要求不高,还有一些电商平台,产品图必须是白底的,怎么才能快速批量处理呢,一个一个抠图,太慢了。...
  • 前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: 苏克1900 ...曾几何时,「抠图」是一个难度系数想当高的活儿...
  • 利用python实现批量抠图利用python实现批量抠图效果工具代码 利用python实现批量抠图 不会Photoshop的你有没有为抠图发愁过呢?即使会了Photoshop,你有没有为需要抠图的图片太多而发愁过呢?因为最近在弄生成词云,...
  • 前言: 今天上课,老师刚好说到...对于不会PS的小伙伴,抠图是一个难度系数想当高的活,某宝照片抠图和证件照换底色价格都是几元左右,那么对于程序员来说,即使不会P图,我们也可以完成自己更换 那么接下来,我们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,057
精华内容 422
关键字:

python抠图工具

python 订阅