抠人像,只需要一个网站就够了

今天发现一个极其简单的抠人像工具,是一个网站,只需要你上传图片就可以了

Remove.bg 是一个国外的在线抠图软件,100%免费,号称是全自动,完全不需要任何的鼠标点击就可以完成抠图操作

方法超级简单,只需要上传你的图片就可以等着收图了

效果图,这是一个比较简单的,看上去效果挺好

接下来放一张色彩比较复杂的图,稍微有些瑕疵

 

另外还可以自定义背景

 

 

注:这个只能抠人像,当我上传了一个没有人物的图片时,它提示了

No persons found: At the moment remove.bg only works for photos with at least one person in them. Sorry – please select an appropriate image.

 

### 实现摄像头实时图换背景的技术方案 实现摄像头实时图并更换背景通常涉及以下几个核心部分: #### 1. 背景建模与前景提取 通过高斯混合模型(Gaussian Mixture Model, GMM)或其他先进的分割算法来区分背景和前景。可以利用 OpenCV 的 `cv::BackgroundSubtractorMOG2` 类完成这一过程[^1]。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture cap(0); // 打开默认摄像头 Mat frame; Ptr<BackgroundSubtractorMOG2> pMOG2 = createBackgroundSubtractorMOG2(); while (true) { cap >> frame; // 获取当前帧 if (frame.empty()) break; Mat bsmaskMOG2; pMOG2->apply(frame, bsmaskMOG2); // 形态学操作去除噪声 Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3)); morphologyEx(bsmaskMOG2, bsmaskMOG2, MORPH_OPEN, kernel, Point(-1, -1)); imshow("Foreground Mask", bsmaskMOG2); if (waitKey(30) >= 0) break; } return 0; } ``` 上述代码展示了如何使用 MOG2 进行背景减除,并通过形态学开运算减少噪声影响。 --- #### 2. 前景区域填充新背景 一旦获得了前景掩码,可以通过简单的像素替换技术将新的背景图像应用到原始视频流中。 ```cpp Mat foregroundMask, resultFrame, backgroundImg = imread("new_background.jpg"); while (cap.read(frame)) { pMOG2->apply(frame, foregroundMask); morphologyEx(foregroundMask, foregroundMask, MORPH_OPEN, kernel, Point(-1, -1)); // 创建三通道掩码用于融合 vector<Mat> channels; split(foregroundMask, channels); Mat maskColor; merge(channels, maskColor); // 替换背景 frame.setTo(backgroundImg.at<Vec3b>(Point(0, 0)), ~maskColor); addWeighted(frame, 1, backgroundImg, 1, 0, resultFrame); imshow("Result with New Background", resultFrame); if (waitKey(30) >= 0) break; } ``` 此代码片段实现了基于掩码的背景替换功能。 --- #### 3. 更高级的人像分割方法 如果希望获得更精确的结果,可考虑引入深度学习框架中的语义分割或实例分割模型,例如 U-Net 或 DeepLabV3+。这些模型能提供更高精度的边缘检测能力[^2]。 以下是 PyTorch 中的一个简单示例,展示如何加载预训练模型进行人像分割: ```python import torch from torchvision import models, transforms from PIL import Image import numpy as np import cv2 # 加载DeepLabv3+ model = models.segmentation.deeplabv3_resnet101(pretrained=True).eval() transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) def segment_person(image): input_tensor = transform(image).unsqueeze(0) with torch.no_grad(): output = model(input_tensor)['out'][0] normalized_output = torch.nn.functional.softmax(output, dim=0) person_mask = normalized_output.argmax(dim=0).numpy() return person_mask == 15 # 'person' class index is typically 15 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break image_pil = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) mask = segment_person(image_pil) masked_frame = np.where(mask[..., None], frame, [0, 255, 0]) # 将背景设为绿色 cv2.imshow('Segmented Person', masked_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 该脚本使用了 Deeplabv3+ 预训练模型来进行人体分割,并将非人物体设置为纯绿颜色作为演示。 --- #### 总结 以上提供了两种主要方式:一种是传统计算机视觉的方法——借助 MOG2 和形态学处理;另一种则是现代深度学习驱动的方式——采用语义分割网络获取精准边界信息。具体选择取决于实际需求以及计算资源限制条件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值