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

本文介绍了一种使用Matlab进行图像处理的方法,通过遍历图片的每个像素并根据RGB值判断其主要颜色,最终确定图像的主体颜色。该方法包括裁剪图片、建立判断函数、遍历像素求值及设置阈值等步骤。

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

使用matlab对图像进行主体颜色判断

欢迎您的到来!
今天学习了利用matlab对一张图片的颜色主体进行判断并输出颜色

程序要求

  • 从文件读取图片
  • 调用函数裁剪出要判断的图片中小灯的颜色

具体步骤

一、获取并裁剪图片

这里就不具体介绍了,若想了解可以翻看我前面的博文
点击查看前文

二、建立判断函数

程序思路:
1、获取要判断的图像的大小
i=size(picture_2,1);  %i为横轴
j=size(picture_2,2)       %j为纵轴
2、了解RGB的颜色组成

(1)想要判断图片的颜色首先就要了解rgb的组成点击查看RGB颜色对照表
(2)表示出图片(24位位图)的RGB

picture_2(i,j,1); %表示坐标系中(i,j)点的R值
picture_2(i,j,2) ;%表示坐标系中(i,j)点的G值
picture_2(i,j,3) ;%表示坐标系中(i,j)点的B值

(3)应用实例:分别求出图像的RGB图像
原图

picture = 'D:\picture3\2.jpeg';
picture=imread(picture);
picture_1=picture(:,:,1);
picture_2=picture(:,:,2);
picture_3=picture(:,:,3);
subplot(2,2,1);
imshow(picture);
title('RGB');
subplot(2,2,2);
imshow(picture_1);
title('R');
subplot(2,2,3);
imshow(picture_2);
title('G');
subplot(2,2,4);
imshow(picture_3);
title('B');

RGB图像

3、遍历图片求各颜色像素值
for i = 1:size(picture_2,1)
      for j = 1:size(picture_2,2)
                .....  %处理程序         
      end
end
4、对各像素值设置阈值
if picture_2(i,j,1)>=200&&picture_2(i,j,2)<=50&&picture_2(i,j,3)<=50          %这里的200 和50可以根据具体情况进行设置
        red=red+1;
elseif picture_2(i,j,1)>=200&&picture_2(i,j,2)>=200&&picture_2(i,j,3)<=50
        yellow=yellow+1;
elseif picture_2(i,j,2)>=200&&picture_2(i,j,1)<=100&&picture_2(i,j,3)<=100
        green=green+1;
end
5、判断各像素值大小
if max(max(red,yellow),green)==red
        color = 'red'
elseif max(max(red,yellow),green)==yellow
        color='yellow'
elseif max(max(red,yellow),green)==green
        color='green'
end

完整代码

1、主函数:
save_path='D:\picture2\';    %获取图片所在位置  
img_path_list = dir(strcat(save_path,'*.jpg'));   %依次仅读取文件夹中的.jpg格式图片
img_num=length(img_path_list);      %判断图片个数
for i=1:img_num
    picture_name = img_path_list(i).name;        %获取图片的名称
    picture_1 = imread(strcat(save_path,picture_name));          %建立循环函数依次读取原始图像
    imshow(picture_1);
    [x,y]=ginput(2);
    picture_2 = imcrop(picture_1,[x(1),y(1),abs(x(1)-x(2)),abs(y(1)-y(2))]);
    imwrite(picture_2,[num2str(i),'.jpg']);
    detection_color(picture_2);
end
2、判断函数
function jianche = detection_color(picture_2)
red=0;
yellow=0;
green=0;
for i = 1:size(picture_2,1)
            for j = 1:size(picture_2,2)
                if picture_2(i,j,1)>=200&&picture_2(i,j,2)<=50&&picture_2(i,j,3)<=50
                    red=red+1;
                elseif picture_2(i,j,1)>=200&&picture_2(i,j,2)>=200&&picture_2(i,j,3)<=50
                    yellow=yellow+1;
                elseif picture_2(i,j,2)>=200&&picture_2(i,j,1)<=100&&picture_2(i,j,3)<=100
                    green=green+1;
                end
            end
end    
if max(max(red,yellow),green)==red
        color = 'red'
elseif max(max(red,yellow),green)==yellow
        color='yellow'
elseif max(max(red,yellow),green)==green
        color='green'
end

我的运行实例:

待检测图片

在这里插入图片描述

程序结果

在这里插入图片描述

### 如何在 MATLAB 中读取并获取图像像素值矩阵 #### 使用 `imread` 函数读取图像 为了从图像文件中加载数据到 MATLAB 工作区,可以使用内置函数 `imread`。此函数能够识别多种常见的图形格式,并返回表示该图像的数据数组。 ```matlab % 读取图像文件至变量 imgMatrix 中 imgMatrix = imread('example.jpg'); ``` 上述命令会将名为 'example.jpg' 的图像载入内存,并存储在一个叫做 `imgMatrix` 的多维数组里[^3]。 #### 获取灰度图像像素值矩阵 如果目标是处理灰度图片,则可以直接操作由 `imread` 返回的结果;因为对于这类单通道影像而言,所得矩阵即代表各位置上的亮度强度分布情况: ```matlab % 显示原始灰度图像及其大小信息 imshow(imgMatrix); title('Original Grayscale Image'); sizeInfo = size(imgMatrix); % 获得图像尺寸信息 disp(['Image dimensions: ', num2str(sizeInfo)]); ``` 当面对彩色图像时,通常情况下它们是以三维形式存在的(RGB),其中每一层对应红、绿、蓝三个颜色分量之一。此时可以通过转换成灰阶来简化后续分析过程: ```matlab if ndims(imgMatrix)==3 && size(imgMatrix,3)==3 grayImg = rgb2gray(imgMatrix); % 将 RGB 图像转为灰度图 else grayImg = double(imgMatrix); % 如果已经是灰度图则直接转换类型 end pixelValues = double(grayImg); % 确保像素值为双精度浮点数以便于运算 ``` 这里先判断输入是否为三通道色彩模式,如果是的话就调用 `rgb2gray()` 方法将其变为二维阵列结构;之后不论原来是什么样的都统一变更为双精度实型(`double`)以方便参与数学计算或其他高级功能应用[^1].
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值