通过matlab实现数字图像处理中的抠图换背景功能

2023-11-19

 适合背景为蓝色的图片,效果最好。

如果背景色为别的颜色,可对代码进行调整修改后使用(其实这里的代码最开始由于报错已经经过我的修改了)

可能出现的异常情况:

1.待抠图片以及需要替换的背景图片放置在代码文件所在的目录,不然会无法读取,不出结果。

2.图片比例应当相同,大小不要差太多。(大小就是下图所示的数值,实际上大小对结果有无影响我并不确定,大家可以自行试验)

3.图片名一定要修改,我这里的原图是“wybb.jpg”背景图名是“background.jpg”,如果你的图片是png格式把.jpg改成.png就ok了。

 

代码如下:

clear;clc;close all;%清理界面
input_image=imread('wybb.jpg');%读取图片
%抠图
figure(1);
subplot(141);imshow(input_image);title('原图');
image=im2double(input_image);%转换成统一的double精度,方便计算
BW_RGB=im2bw(input_image,0.65);%显示RGB二值化结果
subplot(142);imshow(BW_RGB);title('二值化-RGB');%显示RGB二值化结果
BW_R=im2bw(image(:,:,1),0.65);
subplot(143);imshow(BW_R);title('二值化-R');%显示R二值化结果
BW_B=im2bw(input_image(:,:,3),0.65);
subplot(1,4,4);imshow(BW_B);title('二值化-B'); %显示蓝色二值化结果
BW_RGB_inverse=~BW_RGB;
BW_B_inverse=~BW_B;
BW_R_inverse=~BW_R; %将二值化结果取反
figure(2);
imshow(BW_B_inverse);title('二值化-B-取反');
%根据以上二值化所得结果,从其中选取两个二值化图像合成想要的二值化像素图

BW=im2bw(BW_B_inverse+BW_R);
%多次测试,发现蓝色二值化取反结果与红色二值化结果合成图像最为完整
figure(3);
subplot(2,2,1);imshow(BW);title('二值化-B-取反+二值化-R');
BW_fill1=imfill(BW,'holes'); %空洞填充函数:imfill(填洞)
subplot(2,2,2);imshow(BW_fill1);title('空洞填充_1');
N1=4;se1=strel('disk',N1); %设置膨胀算子
BW_dilate1=imdilate(BW_fill1,se1); %膨胀
subplot(2,2,3);imshow(BW_dilate1);title('膨胀');
N2=7;se2=strel('square',N2); %设置腐蚀算子
BW_erode1=imerode(BW_dilate1,se2); %腐蚀
subplot(2,2,4);imshow(BW_erode1);title('腐蚀');
%闭运算:对此二值化图像依次进行膨胀,腐蚀,用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
% 膨胀算法:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。
%腐蚀算法:是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。
Im=imread('background.jpg'); %设置背景
[a,b]=find(BW_erode1==1);
A=Im;
for i=1:size(a,1)
A(a(i),b(i),1)=input_image(a(i),b(i),1);
A(a(i),b(i),2)=input_image(a(i),b(i),2);
A(a(i),b(i),3)=input_image(a(i),b(i),3);
end
figure(4);
imshow(A);title('抠图'); %将抠得图像与背景结合,并显示。

运行结果如下(用的是自己的证件照,人太丑就打下码吧)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过matlab实现数字图像处理中的抠图换背景功能 的相关文章

  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • 如何在MATLAB中显示由三个矩阵表示的图像?

    我有 3 个相同大小的 2D 矩阵 假设 200 行和 300 列 每个矩阵代表三种 基本 颜色 红色 绿色和蓝色 之一的值 矩阵的值可以在 0 到 255 之间 现在我想组合这些矩阵以将它们显示为彩色图像 200 x 300 像素 我怎样
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB

随机推荐

  • 将onnx的静态batch改为动态batch及修改输入输出层的名称

    文章目录 背景 操作 修改输入输出层 修改输入输出层名称 完整代码 背景 在模型的部署中 为了高效利用硬件算力 常常会需要将多个输入组成一个batch同时输入网络进行推理 这个batch的大小根据系统的负载或者摄像头的路数时刻在变化 因此网
  • 《Python进阶系列》十七:详解Python中的猴子补丁——允许在运行时更改对象的行为

    猴子补丁是一项允许在运行时更改对象行为的技术 它是一个非常有用的功能 但它也可能使你的代码更难以理解和调试 因此 在实现猴子补丁程序时必须谨慎 猴子补丁的用法 猴子补丁与Python中的灵活性紧密相关 自定义对象是可变的 因此可以替换其属性
  • laravel-admin grid中使用switch操作一对一关联属性(源码探究到功能实现)

    我的个人博客 逐步前行STEP 项目中有一个商品表 production 有一个库存表 repertory 两者一对一关系 production有发布字段 release 需求是在repertory的grid中 有一个switch开关 用于
  • 【面试题】宏任务和微任务

    1 宏任务和微任务 宏任务 macroTask 和微任务 microTask 都是异步中API的分类 宏任务 setTimeout setInterval Ajax DOM事件 微任务 Promise async await 微任务执行时机
  • C语言经典100例题(25)--求1+2!+3!+...+20!的和

    目录 题目 问题分析 代码 运行结果 题目 求1 2 3 20 的和 问题分析 1 1 2 1 2 3 1 2 3 不难发现 1 2 3 20 每个阶乘都比前一个多乘了一个 i 代码 include
  • 使用antd pro初始化项目时出现报错:

    npm i ant design pro cli g出现报错 解决 使用sudo tnpm i ant design pro cli g 接着pro create myapp 一切都很顺利 但是在tnpm install时出现报错 这个问题
  • C51简介及Keil的使用

    前言 此文档主要是针对有一定C C 编程基础 并打算用Keil从事C51开发的开发人员 C51涉及的知识比较多 但是入门基本的开发 还是容易的 C51简介 1 C51概念 C51继承于C语言 主要运行于51内核的单片机平台 单片机 单片微型
  • Linux环境搭建----VMware安装虚拟机

    一 VMare虚拟机安装与使用 1 1 VMware简介 1 VMware是一个虚拟PC的软件 可以在现有的操作系统上虚拟出一个新的额硬件环境 相当于模拟出一个新的PC 2 WMware官方网站 http www vmware com 3
  • python重复执行命令_怎样能重复执行一条命令直到运行成功

    在我们的日常工作中 需要我们重复做的工作简直不能太多 比如 我们想要确认网络是否是连通的 传统的做法就是使用 ping 命令不停去测试某个地址 比如百度 网络比较好还好说 但如果网络很差 那么就需要一直去运行 ping 命令 作为程序员 重
  • 双链表嵌套的简单学生信息管理系统

    参考 实现双链表嵌套的简单学生信息管理 作者 三速何时sub20 发布时间 2020 07 20 10 44 40 网址 https blog csdn net weixin 44234294 article details 1074581
  • C++内联函数

    C 内联函数 1 什么是函数 函数是一个可以重复使用的代码块 CPU 会一条一条地挨着执行其中的代码 CPU 在执行主调函数代码时如果遇到了被调函数 主调函数就会暂停 CPU 转而执行被调函数的代码 被调函数执行完毕后再返回到主调函数 主调
  • PCL 基于迭代双边滤波的点云平滑

    目录 一 算法原理 1 原理概述 2 主要函数 3 参考文献 二 代码实现 三 结果展示 一 算法原理 1 原理概述 点云双边滤波的算法原理和详细实现过程见 PCL 基于法线的双边滤波 具体实现效果如下图所示 绿色为平滑前的点云 红色为平滑
  • 区块链产业生态发展情况-中国区块链产业生态发展

    2019以来中国区块链产业处于蓬勃发展期 从中央到地方有关区块链发展的指导意见和扶持政策不断发布 据不完全统计 今年上半年全国共有超过23个省市发布了112条涉及区块链的政策信息 多省市把区块链纳入发展数字经济的规划中 大力推进区块链应用落
  • 2023电赛E题:OpenMV4的矩形识别与中心判断

    增加识别率 使用OpenMV4官方的矩形识别案例 发现识别率很低 经常乱识别 为了增加识别率 加入最大矩形块的判断 让其只识别最大的矩形块 发现识别率高了很多 矩形起点识别与中心判断 接着是矩形起点和矩形中心判断 通过矩形类自带的矩形4元素
  • 数据降维

    数据降维 MATLAB实现基于LFDA基于局部费歇尔判别的分类数据降维可视化 目录 数据降维 MATLAB实现基于LFDA基于局部费歇尔判别的分类数据降维可视化 基本介绍 模型描述 程序设计 学习小结 基本介绍 MATLAB实现基于LFDA
  • signature今日头条php实现,今日头条_signature 值解析算法,另带DEMO_精易论坛

    navigator WT JS DEBUG v1 7 5 NLiger2018 appCodeName Mozilla appMinorVersion 0 appName Netscape appVersion 5 0 Windows NT
  • 【无标题】PPTP和L2TP服务器iPhone和PC VPN同时接入设置

    PPTP和L2TP服务器iPhone和PC VPN同时接入设置 VPN 用户管理 添加PPTP和L2TP用户 这样iPhong使用L2TP拨号 因为苹果禁用PPTP PC使用PPTP拨号 因为PPTP比L2TP上网速度快
  • IIS7.5文件解析漏洞&&Apache解析漏洞&&Nginx文件解析漏洞&&

    实验原理 文件上传使用白名单做限制 只能上传图片文件 导致脚本文件无法上传 上传图片马绕过白名单文件上传的验证 但是图片马又无法解析 利用IIS7 5文件解析漏洞的特点 任意文件名 任意文件名 php 从而解析脚本文件 实验步骤 1 登录操
  • 怎样使用Finder从MacOS Catalina删除iPhone和iPad备份?

    是否需要清理一些磁盘空间或摆脱Mac上的某些旧iPhone或iPad备份 备份iPhone或iPad最安全 最彻底的方法是通过Mac Finder进行加密备份 以下是在macOS Catalina中删除旧的iPhone或iPad备份的方法
  • 通过matlab实现数字图像处理中的抠图换背景功能

    适合背景为蓝色的图片 效果最好 如果背景色为别的颜色 可对代码进行调整修改后使用 其实这里的代码最开始由于报错已经经过我的修改了 可能出现的异常情况 1 待抠图片以及需要替换的背景图片放置在代码文件所在的目录 不然会无法读取 不出结果 2