去除图片背景保留人物或其它前景事物

本文介绍了一种基于云服务的图像识别技术,重点在于人物、动物等特定物品的精确识别与背景移除。通过removeBG API服务,无需复杂的算法训练,即可实现图像背景的自动移除,方便快捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片中物体(人物,动物或其它特定物品)的精确识别与提取是人工智能领域重要的一个方面,通过机器学习,最终能达到不需要人工干预准确的进行识别。

以云服务的方式提供

由于这些算法依赖于大量的训练或基础数据,所以,对于一些成果,以静态的算法,每个应用独立去完成漫漫的训练不是个好办法。因此,很多类似的成果会以一种 api 服务接口方式提供,当然服务可能需要付费,但一般有一定的免费量。

使用 removeBG

removeBG 就是这样一种服务,其详细的 api 接口详见 https://www.remove.bg/api,它使用简单,就一个 api 并且提供了多种语言的调用示例。api 免费使用量的限制为每月50次调用

C# 使用示例

(1)获取 api 密钥

注册登录后,在 My Account 中可以查看到 apiKey,实现的方法中需要用到。

(2)根据示例代码形成易调用方法

这里,需求定义为,传入图片 url,返回提取结果的 url。
则方法实现如下:

private string Cutout(string picUrl)
{
    if (String.IsNullOrEmpty(picUrl)) throw new Exception("空空如也");

    using (var client = new HttpClient())
    using (var formData = new MultipartFormDataContent())
    {
        // 申请的 apikey 可考虑动态的调整
        string key = "myremovebgapikey";  // apiKey

        formData.Headers.Add("X-Api-Key", key);
        formData.Add(new StringContent(picUrl), "image_url");
        formData.Add(new StringContent("auto"), "size");
        var response = client.PostAsync("https://api.remove.bg/v1.0/removebg", formData).Result;

        if (response.IsSuccessStatusCode)
        {
            string imgName = DateTime.Now.ToString("yyyyMMddHHmmss");
            FileStream fileStream = new FileStream(HttpContext.Current.Server.MapPath(String.Format("~/images/{0}.png", imgName)), FileMode.Create, FileAccess.Write, FileShare.None);
            response.Content.CopyToAsync(fileStream).ContinueWith((copyTask) => { fileStream.Close(); });

            string imgUrl = String.Format("http://mydomain/images/{0}.png", imgName);
            return imgUrl;
        }
        else
        { 
            throw new Exception(response.Content.ReadAsStringAsync().Result); 
        }
    }
}

示例体验

如下图,左边的图片,去除背景,抠出的人物效果如右图。图片会是背景透明的 png 文件,很方便自已添加背景。

操作方式

关注公众号“时间维度”,发送带有人物的图片即可。有使用量限制,哈哈!

 

Python的OpenCV库是一个非常强大的图像处理工具,可以使用它对图片进行各种操作,包括去除背景保留人物。 要去除背景保留人物,可以采用以下步骤: 1. 读取图片:使用OpenCV的“imread”函数读取待处理的图片。 2. 去除背景:可以使用OpenCV的“grabCut”函数进行背景去除。首先,需要创建一个与原始图像相同大小的掩码。将掩码中不需要分割的区域设置为0,将人物所在的区域设置为3。然后,通过调用“grabCut”函数,传入原始图像和初始化的掩码,进行背景去除。该函数会根据掩码中的初始化值,对图像进行迭代分割,最终得到分割好的图像。 3. 保存分割结果:将分割好的图像保存到本地,可以使用OpenCV的“imwrite”函数。 下面是一个简单的示例代码: ```python import cv2 # 读取图片 image = cv2.imread('input.jpg') # 创建与原始图像大小相同的掩码 mask = np.zeros(image.shape[:2], np.uint8) # 设置掩码中不需要分割的区域为0,设置人物所在的区域为3 mask[100:500, 100:700] = 3 # 进行背景去除 bgdModel = np.zeros(shape=(1, 65), dtype=np.float64) fgdModel = np.zeros(shape=(1, 65), dtype=np.float64) cv2.grabCut(image, mask, None, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK) # 将掩码中被标记为前景的区域设置为255 mask = np.where((mask == 3) | (mask == 1), 255, 0).astype('uint8') # 对原始图像进行掩码操作,保留前景 result = cv2.bitwise_and(image, image, mask=mask) # 保存分割结果 cv2.imwrite('output.jpg', result) ``` 以上代码仅仅是一个简单的示例,实际操作时可能需要根据具体情况进行参数调整和优化。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值