目录

1. 需求分析

2. 技术分析

3. 程序代码


1. 需求分析

日常工作、研究、学习当中,往往需要对图片进行处理。其中图片重新着色、渲染是非常常见的。比如说去掉或则更换证件照底色;去掉遥感图像中黑边……为解决此类问题,而编写此代码。

2. 技术分析

图片处理主要其中有两个重要步骤:a.提取目标位置,获取索引;b.着色、渲染等处理;本代码也是按照这两个步骤来写的:a.利用find函数提取目标,获取其索引;b. 再根据索引,进行着色渲染处理。find函数用法如下:

find - 查找非零元素的索引和值此 MATLAB 函数 返回一个包含数组 X 中每个非零元素的线性索引的向量。k = find(X)k = find(X,n)k = find(X,n,direction)[row,col] = find(___)[row,col,v] = find(___)

3. 程序代码

根据技术分析,进行编程。本人在网上找到一段相关代码,并基于此进行进一步编程。源代码如下:

clear;close all;clc;image = imread('测试.JPG');                      % 读取图像
figure('Name','原图')
imshow(image);                                  % 显示
R = image(:,:,1);                               % 红色
G = image(:,:,2);                               % 绿色
B = image(:,:,3);                               % 蓝色index = find(R<20 & G<20 & B<20);               % 索引,找出被替换颜色的范围
R(index) = 255;                                 % 红色通道赋值
G(index) = 255;                                 % 绿色通道赋值
B(index) = 255;                                 % 蓝色通道赋值
Out_Image(:,:,1) = R;                           % 输出图像红色通道
Out_Image(:,:,2) = G;                           % 输出图像绿色通道
Out_Image(:,:,3) = B;                           % 输出图像蓝色通道
figure('Name','颜色改变之后的图')
imshow(Out_Image);                              % 显示输出图像

上面这段代码来自:利用matlab代码怎么将黑色变为白色,而红色不变 – MATLAB中文论坛

本人将这个功能实现整合成一个函数Color_Con,必输输入侧参数有照片路径,可选参数有所替换的(某种或某类)颜色、需要赋予的新颜色以及输出的文件名,本人在程序中详细介绍了其用法,并对代码进行详细明了的注释,不懂之处可以咨询。代码如下:

function Color_con(Image_Name,Old_Color,New_Color,Flag_C,varargin)%==================================说明====================================
%   图像颜色转换
%   函数作用:用于将图中某种(类)颜色转化成另一种颜色
%
%   作者:胡礼珍
%   单位:厦门大学联合遥感接收站
%   邮件:hulizhen@xmu.edu.cn
%
%   输入:
%       Image_Name  彩色图像(必须的,灰白图像不行)
%       Old_Color   需要被替换的颜色,必须是1×3矩阵,或者是2×3矩阵;
%                   1.当为1×3矩阵,若Flag_C为yes,则表示替换某种颜色,
%                   Flag_C为no时,则表示替换
%                   ([0:Old_Color(1)],[0:Old_Color(2)],[0:Old_Color(3)]);
%                   2. 当为1×3矩阵,若Flag_C为yes,则表示替换某种Old_Color(1,:)颜色,
%                   Flag_C为no时,则表示替换:
%                   ([Old_Color(2,1):Old_Color(1,1)],
%                    [Old_Color(2,2):Old_Color(1,2)],
%                    [Old_Color(2,3):Old_Color(1,3)]);
%                   注:Old_Color(1,:)>=Old_Color(2,:) 必须为真才行
%       New_Color   想要的颜色,具体的某一种颜色[R G B]
%       Flag_C      用于判断被替换的颜色是某一类颜色还是某一种颜色,
%                   默认为某一种颜色;
%                   1. 如果Flag_C为“Yes”则表示改变某一种颜色;
%                   2. 如果Flag_C为“N0”则表示改变某一类颜色
%                       颜色范围为:
%                       ([0:Old_Color(1)],[0:Old_Color(2)],[0:Old_Color(3)]);
%                       注:[a:b]表示值域:a≤x≤b
%                   %   输出:
%       无,但会生成一个修改后的图片
%   语法:
%   Color_con(Image_Name,Old_Color,New_Color)
%   Color_con(Image_Name,Old_Color,New_Color,Flag_C)
%   保存文件的格式有:
%--------------------------------------------------------------------------
%   https://www.ilovematlab.cn/thread-574152-1-1.html
%==========================================================================
narginchk(3,4);             % 输入参数个数必须是3-4个,否则报错
nargoutchk(0,0);            % 输出参数个数必须是0个,否则报错if nargin == 3Flag_C ='yes';          % 如果只有三个输入,则默认Flag_C为yes
end
Image = imread(Image_Name);                     % 读取图像
figure('Name','原图')
imshow(Image);                                  % 显示
R = Image(:,:,1);                               % 红色
G = Image(:,:,2);                               % 绿色
B = Image(:,:,3);                               % 蓝色if Flag_C == "yes"              % 1. Flag_C参数为yes,替换某一种颜色index = find(R==Old_Color(1,1) & G==Old_Color(1,2) & B==Old_Color(1,3));
elseif Flag_C == "no"           % 2. Flag_C参数为no,替换某一类颜色[row,col]=size(Old_Color);  % 计算矩阵大小if row == 1 && col ==3      % 2.1 当为1×3矩阵时;index = find(R<=Old_Color(1) & G<=Old_Color(2) & B<=Old_Color(3));elseif row == 2 && col ==3  % 2.2 当为2×3矩阵时;if Old_Color(1,:)>=Old_Color(2,:)       % 第一行元素必须大于第二行index = find(R<=Old_Color(1) & R>=Old_Color(2) & ...G<=Old_Color(3) & G>=Old_Color(4) & ...B<=Old_Color(5) & B>=Old_Color(6));elseerrordlg('输入参数Old_Color错误,第一行需全部大于第二行','输入错误');return;endelseerrordlg('输入参数Old_Color错误,矩阵大小不对','输入错误');return;end
else                            % 3. 其它类型字符串errordlg('输入参数Flag_C错误,不是yes或no','输入错误');return;
end% 索引,找出被替换颜色的范围
% index = find(R==Old_Color(1) & G==Old_Color(2) & B==Old_Color(3));R(index) = New_Color(1);                                 % 红色通道赋值
G(index) = New_Color(2);                                 % 绿色通道赋值
B(index) = New_Color(3);                                 % 蓝色通道赋值Out_Image(:,:,1) = R;                           % 输出图像红色通道
Out_Image(:,:,2) = G;                           % 输出图像绿色通道
Out_Image(:,:,3) = B;                           % 输出图像蓝色通道figure('Name','颜色改变之后的图')
imshow(Out_Image);                              % 显示输出图像
imwrite(Out_Image,'Out_Image.png');
end

调用上面函数的代码(主程序),三种用法都做了测试,具体如下:

clear;close all;clc;
% 第 1 种用法
Color_con('测试.png',[0 0 0],[255 0 0],'yes');
% 第 2 种用法
% Color_con('测试.png',[20,20,20],[255 0 0],'no');
% 第 3 种用法
% Color_con('测试.png',[20,20,20;0 0 0],[255 0 0],'no');

不足之处,敬请斧正!

转载请说明出处!

路漫漫其修远兮,吾将上下而求索。

利用Matlab替换图片部分颜色相关推荐

  1. 利用MATLAB实现图片切换动画效果详解

    内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释.介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效.其中 ...

  2. 利用MATLAB将图片转换成coe文件、TXT文件、mif文件、bin文件

    利用MATLAB将图片转换成coe文件.TXT文件.mif文件 利用MATLAB将图片转换成coe文件 利用MATLAB将图片转换成txt文件 利用MATLAB将图片转换成mif文件 利用MATLAB ...

  3. 利用Matlab将图片转换成素描(简笔画)风格

    题目: 利用Matlab将图片转换成素描(简笔画)风格 记得曾经看过别人的网络头像,是那种类似简笔画或素描的图片,一直以来都想做一个类似的头像,但始终不得要领.今天当我看到文献[1]中的图5.28时( ...

  4. matlab给图片添加颜色条

    首先拖动图片至matlab命令行窗口,可以重新命名一下(命名为abb). 命令行输入"imshow(abb)",单击图片上方的"插入颜色栏",默认插入matla ...

  5. matlab给图片加颜色,Matlab中给figure添加图例(legend),标题(title)和颜色(color)...

    在Matlab绘图过程中,尤其是需要将多个图绘制在相同的坐标轴中时,通常需要将不同的曲线设置成为不同的颜色.此外,为了直观,还需要给这张图标增添标题和图例.这篇文章展示了在Matlab的绘图窗口(fi ...

  6. 颜色矩特征提取matlab,求matlab彩色图片的颜色特征提取算法的代码,和纹理特征提取的? 爱问知识人...

    其实学数字图像处理,关键的不是源代码(和一般编程还是有区别的,这个是经验之谈,其实一般博导未必会编程,但是你和他说说你的方法,他一般都能切中要害),而是你能理解基于概念及适用场所. 基于颜色.纹理.形 ...

  7. matlab 浮雕,基于MATLAB根据图片快速制作陶瓷浮雕的方法与流程

    本发明属于陶瓷制作技术领域,尤其涉及基于MATLAB根据图片快速制作陶瓷浮雕的方法. 背景技术: 印模成形是传统的陶艺成形工艺之一,它具有制作简便.省时省力.对制作者没有过多的技艺要求的优点,因而直到 ...

  8. matlab判断图片颜色计算像素值

    使用matlab对图像进行主体颜色判断 欢迎您的到来! 今天学习了利用matlab对一张图片的颜色主体进行判断并输出颜色 程序要求 从文件读取图片 调用函数裁剪出要判断的图片中小灯的颜色 具体步骤 一 ...

  9. matlab图片拼接变成白的,利用matlab实现对图片的拼接

    利用matlab实现对图片的拼接 (图像处理的课堂小作业,简单地手打代码,有问题请联系) 1.效果图 (先看效果图,后思考怎么实现) 原图: 简单拼接: 再进一步操作,加了线: 2.原理 1.matl ...

最新文章

  1. numpy如何生成随机数
  2. 解决Jira和Confluence访问打开越来越缓慢问题
  3. kotlin dsl_Spring Webflux – Kotlin DSL –实现的演练
  4. san分布式共享文件系统_SAN网络存储共享软件全攻略剖析
  5. recyclerview item动画_这可能是你见过的迄今为止最简单的RecyclerView Item加载动画...
  6. MVVM中数据验证之 ViewModel vs. Model
  7. 一家贩卖8亿份个人简历的公司 现已人去楼空
  8. Linux的压缩相关命令(转载)
  9. gitlab merge request
  10. zip命令 – 压缩文件
  11. 项目整合管理——变更控制流程
  12. 深度学习笔记-----YOLOV4框架结构大讲解
  13. 学习笔记-NTLM中继
  14. kkFiewView代码分析(三)有关CAD文件的转换
  15. JavaScript 抢购茅台脚本 仅供学习
  16. 从入门到深入!java游戏口袋精灵
  17. 友豆火山CPG插件开发001-简介初识
  18. 【解决方案】SkeyeVSS综合安防平台在智慧高速公路隧道监控中的应用
  19. springboot +mybatisPlu控制台打印sql
  20. python爬虫获取双色球历史中奖纪录写入数据库

热门文章

  1. 微商利用手机APP挣钱方法与大家分享
  2. oracle em 监听,监听程序ORACLE_HOME是啥??我EM重置,这个不知道要填什么
  3. 糟糕!我的服务器CPU被黑客挖矿了
  4. 如何设计游戏中的道具功能(三)
  5. 若依分离版部署遇到的问题
  6. Three——二、加强对三维空间的认识
  7. Easyexcel 获取表格具体位置的内容
  8. 名帖52 王献之 小楷《洛神赋》
  9. shell脚本scp自动输入密码
  10. 故障修复:mswinsck 加载失败