【MATLAB项目实战】基于RGB特征的火焰检测

首先数据转换为帧图像

clc;
clear all;

obj = VideoReader('1.mp4');%输入视频位置
numFrames = obj.NumberOfFrames;% 帧的总数
for k = 1:numFrames
    frame = read(obj,k);
    nz = num2str(k);
    id=sprintf(nz,k);
    frame=imresize(frame,[227 227]);
    imwrite(frame,strcat('帧图像/',id,'.jpg'),'jpg');% 保存帧
end


提取RGB特征

clc;
clear all;
I2=imread('帧图像\10.jpg');
I=double(I2);
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
% 对于普通的火焰来说,它的红色分量和绿色分量会很大
% 并且绿色分量会大于蓝色分量,所以我们设下的简单判据是:
%                     R > R_avg    AND
%                     G > G_avg    AND
%                     R > G > B
% 均值
R_avg=mean(R,'all');
G_avg=mean(G,'all');
B_avg=mean(B,'all');
[m,n,p]=size(I);
I1=[];
% 实现图像的RGB检测,把符合RGB判据的素点置为1,否则置为0,返回的是只有01的二值化模板。
for i=1:m
    for j=1:n

            if R(i,j)>R_avg && G(i,j)>G_avg && (R(i,j)>G(i,j))&&(G(i,j)>B(i,j))
                I1(i,j)=1;
            else
                I1(i,j)=0;
            end
    end
end

figure
imshow(I1)
title('二值化结果')

se1 = strel('disk',2);
f1 = imclose(I1,se1);
[L,num]=bwlabel(f1);
STATS = regionprops(L,'BoundingBox');
%%
figure
imshow(I2)
hold on
rectangle('Position',STATS(1).BoundingBox,'EdgeColor','r','LineWidth',2); 
title('基于RGB特征的火焰检测')

达到的效果:
在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大桃子技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值