今天跟大家唠唠我这几天搞的“裸美女”的事儿,别想歪,我说的是代码! 最近在研究图像处理,想搞点新鲜的,就琢磨着能不能把美女图的背景给抠,只留下主体,看着更清爽。
我寻思着用PS啥的,手动抠图,那叫一个费劲!抠一张图,眼都花,效率太低。程序员嘛就得用代码解决问题!
然后我就开始找各种图像处理的库,OpenCV、PIL啥的都试试。 OpenCV功能是强大,但是上手有点难度,API太多,看的我头大。PIL倒是挺简单,但是抠图效果感觉差点意思。
我选个叫RemBG的库,这玩意儿专门用来抠图,效果还真不错。这玩意儿用Python写的,安装也简单,直接`pip install rembg`就完事儿。
安装好之后,我就开始撸代码。这RemBG用起来也简单,几行代码就能把背景给抠。
python
from rembg import remove
from PIL import Image
input_path = '*' # 你要抠图的图片
output_path = 'meinv_*' # 抠完图保存的地方
input = *(input_path)
output = remove(input)
*(output_path)
就这么几行代码,搞定!
我随便找张美女图,运行一下,效果还真可以。背景直接变成透明的,美女主体保留的挺完整。
不过这玩意儿也不是万能的。有些图片背景太复杂,或者主体边缘和背景颜色太接近,抠出来的效果就没那么
为解决这个问题,我又研究一下RemBG的参数。发现它可以调整一些参数,比如设置前景和背景的颜色阈值,这样可以提高抠图的精度。
python
from rembg import remove
from PIL import Image
input_path = '*'
output_path = 'meinv_*'
input = *(input_path)
output = remove(input, alpha_matting=True, alpha_matting_foreground_threshold=240, alpha_matting_background_threshold=10)
*(output_path)
我试着调整一下`alpha_matting_foreground_threshold`和`alpha_matting_background_threshold`这两个参数,发现对抠图效果确实有影响。
alpha\_matting: 这个参数是用来开启Alpha通道抠图的,开启后可以获得更精细的边缘。
alpha\_matting\_foreground\_threshold: 前景阈值,数值越高,越多的像素被认为是前景。
alpha\_matting\_background\_threshold: 背景阈值,数值越高,越多的像素被认为是背景。
我根据不同的图片,不断调整这两个参数,抠图效果越来越
我还发现,RemBG可以直接处理视频!这玩意儿简直是神器!
python
import rembg
import cv2
input_path = '*4'
output_path = 'meinv_*'
# 打开视频
video = *(input_path)
# 获取视频的帧率和尺寸
fps = *(*_PROP_FPS)
size = (int(*(*_PROP_FRAME_WIDTH)), int(*(*_PROP_FRAME_HEIGHT)))
# 创建视频写入对象
fourcc = *_fourcc('XVID')
output = *(output_path, fourcc, fps, size)
# 循环读取视频帧
while True:
ret, frame = *()
if not ret:
break
# 将视频帧转换为PIL图像
image = *(*(frame, *_BGR2RGB))
# 移除背景
output_image = *(image)
# 将PIL图像转换为视频帧
frame = *(*(output_image), *_RGB2BGR)
# 写入视频帧
*(frame)
# 释放资源
这段代码可以把视频的背景也给抠,不过速度有点慢,毕竟要处理每一帧。
这回“裸美女”的实践,让我对图像处理有更深的解。 RemBG这个库确实好用,简单方便,效果也不错。以后有机会,我还想研究一下更高级的图像处理技术,比如人脸识别、图像修复啥的。
以后再也不怕找不到清爽的美女图,哈哈!
还没有评论,来说两句吧...