如何用 Python 实现一个抠图功能

Python042

如何用 Python 实现一个抠图功能,第1张

使用Python和OpenCV进行抠图

其中使用了opencv中的grabcut方法

直接上代码

[python] view plain copy

# encoding:utf-8

# 图像提取

# create by

import numpy as np

import cv2

from matplotlib import pyplot as plt

img = cv2.imread('1.jpg')

mask = np.zeros(img.shape[:2], np.uint8)

bgdModel = np.zeros((1, 65), np.float64)

fgdModel = np.zeros((1, 65), np.float64)

rect = (20, 20, 413, 591)

cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 10, cv2.GC_INIT_WITH_RECT)mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')img = img * mask2[:, :, np.newaxis]

img += 255 * (1 - cv2.cvtColor(mask2, cv2.COLOR_GRAY2BGR))# plt.imshow(img)

# plt.show()

img = np.array(img)

mean = np.mean(img)

img = img - mean

img = img * 0.9 + mean * 0.9

img /= 255

plt.imshow(img)

plt.show()

抠图是日常办公中经常会遇到的问题,某乎上就有这样一个问题:

里边的tag 全是设计相关,但是我学了些python,怎么用Python的方法来解决呢?

首先我找了本回答下的高赞回答,利用的ps,魔棒、磁性套索、钢笔等等。

我把他用到的几张示例图保存了下来。然后放在一个文件夹里。此为示例图。

然后用python代码执行,3秒钟左右图就扣好了。

比较难的一张,扣头发丝,效果也非常不错,我们来看一下原图和对比图,基本的小细节都处理得不错。

当然,处理更多的图片也是几秒钟的事。

下面讲一下原理。

本例是利用的Python来实现的。调用的是RemoveBg 这个库。

RemoveBg 是国外的一个抠图网站。本身是完全免费的,但是只能一张一张上传-抠图-下载,如果你有大批量的图片需要处理,就比较低效,也不符合本题的主旨,高效。

好在,本着极客精神,本站为我们提供了API,可以直接调用网站的抠图方法,直接在本地抠图。

首先,我们需要注册一下网站,用自己常用的邮箱就可以了。

然后点击工具和API。

往下拉,找到API Docs。

然后点击API key 就可以找到属于你的API了。

到这里,要先记住你的API key。

然后你,可以在你喜欢的位置新建一个文件夹。

如果你有python基础的话,就可以轻易读懂这个:

没有的话,可以直接复制,然后路径地址。

然后遍历这个文件夹中的文件,然后再用这个工具处理,就可以了

总的代码就这几行,总之来说是非常简单。

前提是你需要安装python环境,然后再安装RemoveBg这个包就可以了。