Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >segment anything原来可以这么玩

segment anything原来可以这么玩

作者头像
小王不头秃
发布于 2024-06-19 09:32:49
发布于 2024-06-19 09:32:49
26700
代码可运行
举报
运行总次数:0
代码可运行

前言

最近,大模型的热度确实是非常非常的高,从chatgpt到segment anything,这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥, 想想能不能用大模型整点花活。

这时候突然想起来了去年的极乐净土,确实做的有点粗糙,去年就是提取了下边缘加个rgb就完事了,这让我有点不大尽兴,直到我看到了小鸡舞。 segment anything是干啥的,不就是图像分割吗,那我是不是可以把这位舞者分割出来,然后换到其他背景里,说干就干。

内容

大致的思路其实就是我们用segment anything把图像分割出来,然后把人的掩码单独拿出来,然后再随便整个背景,把我们提取的人物放进去就完事了,整个过程看着还是蛮简单的哈,我们具体看看咋做。

首先第一步就是要配置下segment anything的环境,这里我们不使用segment anything官方提供的服务跑了,因为确实要跑好多张,所以我们自己配一下。其实很简单就是安装一下pytorch gpu版本(显卡稍微差点的话可以用cpu的),然后把项目从github拉下来,在安装下他要求的库就ok了,网上有很多配置segment anything 的博客,这里我就不展开说了。

这时候我们把视频转换成图片,就直接用opencv转换就可以,详细代码在下一节。然后我们使用segment anything对其进行分割,就可以拿到这样的掩码

我们可以看到,分割的效果非常nice,但是有一个问题,我怎么把人的掩码单独提出来呢???

博主找了一下,好像是已经有人在segment anything的基础上进行分类了,但确实有点麻烦,博主本着能坐着就不能站着,能躺着就不坐着的心态思考了下,发现还真有个个省事。

要知道,我们可是有yolo的呀,这目标检测能力嘎嘎的

那我们就可以直接提取检测框里的最大掩码就可以了,这样我们就拿到了人物的掩码

到此为止,人物就提取出来了,接下来我们就是随便找个背景拼接下就完事了,看看具体实现吧。

具体实现

因为segment anything和yolov5都有现成的代码,我们就不介绍了,我们只介绍这个拼接的部分

拼接代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- codeing = utf-8 -*-
# @Time : 2023/7/5 19:30
# @Author : xiaow
# @File : test.py
# @Software : PyCharm
import os

import cv2

import numpy as np


def mix():
    # 背景图片存放的位置
    backs = os.listdir('../video2img2')
    # 人物掩码的位置
    masks = os.listdir('mask')
    # 0 1 掩码的位置
    mask2s = os.listdir('mask2')
    # 设置输出视频的帧数
    fps = 15
    videopath = 'test10.avi'  # 图片保存地址及格式
    size = (1000, 666)
    out1 = cv2.VideoWriter(videopath, cv2.VideoWriter_fourcc(*'DIVX'), fps, size)

    for i in range(len(backs)):
        print(masks[i])

        back = cv2.imread('../video2img2/' + backs[i])
        # 修改背景尺寸大小
        back = cv2.resize(back, size, interpolation=cv2.INTER_AREA)
        human = cv2.imread('mask/' + masks[i])
        mask2 = cv2.imread('mask2/' + mask2s[i], 0)


        # 设置mask,human大小和背景相同大小  start
        width = back.shape[0]
        height = back.shape[1]
        width_diff = width - human.shape[0]
        height_diff = height - human.shape[1]
        human = np.pad(human, ((width_diff // 2, width_diff // 2), (height_diff // 2, height_diff // 2), (0, 0)))
        mask2 = np.pad(mask2, ((width_diff // 2, width_diff // 2), (height_diff // 2, height_diff // 2)))
        # 设置mask,human大小和背景相同大小  end

        mask2 = np.expand_dims(mask2, 2)
        out1.write((1 - mask2) * back + human)


if __name__ == '__main__':
    mix()

成果

这里以gif的形式展示一部分内容,全部视频可以在b站搂一眼

https://www.bilibili.com/video/BV1z14y1o77Z?share_source=copy_web

segment anything 碰上小鸡舞

就到这了 溜了溜了

如有侵害您的权益请联系我们,侵权必删

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用YOLO11分割和高斯模糊创建人像效果
本文通过结合最新的YOLO11实例分割模型和高斯模糊,为你的图片应用人像效果。我们将使用YOLO11将人物从背景中分割出来,并对除了主体之外的所有内容应用模糊效果。
小白学视觉
2024/10/11
3760
使用YOLO11分割和高斯模糊创建人像效果
使用Python-去除视频背景
no怕不了木
2023/08/08
7800
使用Python-去除视频背景
视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)
做了一个简单的实验,利用modelscope的人像抠图模型对视频流进行抠像并更换背景。
悟乙己
2023/01/03
2K0
视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)
Github复现之TransUnet更新[通俗易懂]
上一篇关于TransUnet的GitHub复现,大家反映效果不好,调参也不好调,我把模型单独拿出来,放到另外一个框架,供大家参考学习(上一篇链接:https://blog.csdn.net/qq_20373723/article/details/115548900) 我这里训练了20个epoch,下面先给出效果正常的情况: 原图
全栈程序员站长
2022/10/04
1.9K0
Github复现之TransUnet更新[通俗易懂]
一行代码快速图像识别~一排代码搞定视频识别
一行代码能干嘛?这种噱头式的开头现在估计已经不香了。。。我只能在别人挖好的土堆上再刨一铲子。
一个有趣的灵魂W
2020/09/15
7920
一行代码快速图像识别~一排代码搞定视频识别
实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
本文主要介绍基于YOLOv9+SAM实现动态目标检测和分割,并给出详细步骤和代码。
Color Space
2024/04/12
2.8K0
实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
这个操作可能不值钱,但却值得学习 | 【图片批量裁剪】
有一句叫:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已 这句话,在实际的应用中,让我体会很深,目前很多算法已经能到初步满足我们的需求,更多的时候是要花费大量的时间在处理数据上面,现实生活的数据经常是很难满足算法的基本要求,例如常见的样本不均衡问题的等,今天要介绍的就是1、固定区域图片裁剪;2、自定义裁剪图片
AI算法与图像处理
2019/05/22
7990
利用Python做一个小姐姐词云跳舞视频
本文将以哔哩哔哩–乘风破浪视频为例,you-get下载视频,同时利用python爬取B站视频弹幕,并利用opencv对视频进行分割,百度AI进行人像分割,moviepy生成词云跳舞视频,并添加音频。
Python编程与实战
2021/03/10
7760
利用Python做一个小姐姐词云跳舞视频
Segment Anything笔记 - plus studio
Segment Anything project是一个用于图像分割的新任务、模型和数据集。在他刚出来的那一天,知乎等平台就已经高呼CV已死。为了这个项目,作者创建了迄今为止最大的分割数据集,1100万张在10亿次授权且尊重隐私的图像上的数据集。模型也被设计和训练成了promptable,就是说可以给他一些提示。作者在多个数据集测试了他的结果并认为结果令人满意。
plus sign
2024/02/28
3860
Segment Anything笔记 - plus studio
OpenCV趣味应用系列--grabCut人物背景替换
本文将使用grabCut来提取图像中的人物,同时使用mask将提取的人物贴到新的背景中,实现给人物替换背景的功能。
Color Space
2022/12/22
7230
OpenCV趣味应用系列--grabCut人物背景替换
「 计算机视觉」帧差法移动侦测
这是我大学舍友小钊在前几天培训公司内部人员顺便记录的一篇关于帧差法移动侦测的文章,介绍下小钊,广西佬,我的大学舍友,特点是烟勤话少爱抠脚。是一名计算机视觉工程师,主要专注于桑拿沐足(啊?呸!)、将算法应用到嵌入式设备上,实现低成本的落地方案注册 。
JavaFish
2019/10/17
1.2K0
利用Python做一个漂亮小姐姐词云跳舞视频
B站上的漂亮的小姐姐真的好多好多,利用 you-get 大法下载了一个 B 站上跳舞的小姐姐视频,利用视频中的弹幕来制作一个漂亮小姐姐词云跳舞视频,一起来看看吧。
叶庭云
2021/02/02
1K0
学会这些Python美图技巧,就等着女朋友夸你吧
Python中有许多用于图像处理的库,像是Pillow,或者是OpenCV。而很多时候感觉学完了这些图像处理模块没有什么用,其实只是你不知道怎么用罢了。今天就给大家带了一些美图技巧,让你的图美翻全场,朋友圈赞不绝口,女朋友也夸你,富贵你好厉害啊!
ZackSock
2020/05/18
5700
学会这些Python美图技巧,就等着女朋友夸你吧
Python的Albumentations库
对 ImageNet validation set 中的前 2000 张图片进行处理,采用 Intel Core i7-7800X CPU. 不同数据增强库的处理速度对比(以秒为单位,时间越少越好).
狼啸风云
2021/05/13
2.4K0
Python的Albumentations库
OpenCV 图像分割之grabCut算法
GrabCut算法的原理涉及到以下知识: K均值聚类 高斯混合模型建模(GMM) max flow/min cut GrabCut算法的实现步骤: 在图片中定义(一个或者多个)包含物体的矩形。 矩形外的区域被自动认为是背景。 对于用户定义的矩形区域,可用背景中的数据来区分它里面的前景和背景区域。 用高斯混合模型(GMM)来对背景和前景建模,并将未定义的像素标记为可能的前景或者背景。 图像中的每一个像素都被看做通过虚拟边与周围像素相连接,而每条边都有一个属于前景或者背景的概率,这是基于它与周边像素颜色上的
用户6021899
2019/09/17
3.5K0
OpenCV 图像分割之grabCut算法
MaskRCNN 基于OpenCV DNN的目标检测与实例分割
这里主要记录基于 OpenCV 4.x DNN 模块和 TensorFlow MaskRCNN 开源模型的目标检测与实例分割 的实现.
AIHGF
2019/05/13
1.9K0
MaskRCNN 基于OpenCV DNN的目标检测与实例分割
Semantic Drone Dataset(语义无人机数据集)使用方法「建议收藏」
Semantic Drone Dataset数据集下载地址 该语义无人机数据集专注于城市场景的语义理解,以提高无人机自主飞行和着陆程序的安全性。该图像描绘了在距地面 5 至 30 米的高度从最低点(鸟瞰)视角拍摄的 20 多座房屋。高分辨率相机用于获取尺寸为 6000x4000px (24Mpx) 的图像。训练集包含 400 张公开可用的图像,测试集包含 200 张私有图像。
全栈程序员站长
2022/09/21
4850
Semantic Drone Dataset(语义无人机数据集)使用方法「建议收藏」
用 OpenCV 实现自动驾驶中的车道识别
“车道”,其相关解释在维基百科或者百度百科上都有,不过,正如我们日常所言,都是用来专指“机动车道”。所以,“车道识别”、“自动驾驶”等术语,也是针对机动车而言。
老齐
2021/12/13
7530
用 OpenCV 实现自动驾驶中的车道识别
交互式前景提取
算法:交互式前景提取是首先用矩形框指定要提取的前景所在的大致范围,接着执行前景提取算法得到初步结果。然后,用户复制原图像作为掩模图像,用白色标注要提取的前景区域,用黑色标注背景区域。最后,使用掩模图像执行前景提取算法从而获得理想的提取结果。
裴来凡
2022/09/21
6940
交互式前景提取
CV -- YOLOv8 图像分割(GPU环境)
https://download.csdn.net/download/2403_83182682/90405543?spm=1001.2014.3001.5503
用户11404404
2025/02/20
2660
CV -- YOLOv8 图像分割(GPU环境)
相关推荐
使用YOLO11分割和高斯模糊创建人像效果
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验