其中使用了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这个包就可以了。