• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: Matlab
  • 标签: 背景差分  matlab  

资源简介

用前N帧背景建模,然后逐帧背景更新,适合新手学习。

资源截图

代码片段和文件信息

function x = Whl
%初始化背景所需要的帧数
N=15;%背景更新参数
mov = aviread(‘1.AVI‘);%读取AVI视频文件
%获取视频帧数
dimension = size(mov);
frameQTY = dimension(2);
M=mov;
tmFr = rgb2gray(frame2im(mov(1)));%变成灰度图
s = size(tmFr);
scrsz = get(0‘ScreenSize‘);%获取屏幕大小
h1 = figure(‘position‘ [11s(2)*2s(1)*2]);
cdataSum = int16(zeros(s));
sedisk = strel(‘rectangle‘[22]);
sedisk2 = strel(‘rectangle‘[32]);
count = zeros(s);
for c1 = 1:frameQTY;
    colorFrC = M(c1);%获取第i帧
    frC = rgb2gray(frame2im(colorFrC));
    frC = im2frame(frC gray(256));
    f = int16(frC.cdata);
    if( c1<= N)
        %前N帧用于背景建模
        movie(h1 frC 1 15 [0s(1)00]);%播放第i帧
        cdataSum = cdataSum + f;    
    else
        %开始运动检测,首先计算出背景
        if(c1==N+1)cdB = cdataSum/N;
        else  colorFrC1 = M(c1-N);%获取第c1-N帧
              frC1 = rgb2gray(frame2im(colorFrC1));
              frC1 = im2frame(frC1 gray(256));
              f1 = int16(frC1.cdata);
              cdataSum=cdataSum+f-f1;%背景更新
              cdB=cdataSum/N;
              cdB = int16(cdB);
        end
        f2 = abs( f - cdB );
        f2 = uint8(f2);
        bwf = f2;
        bw = find( f2 < 45 );
        bwf(bw) = 0;
        bw = find( f2 >= 45 );    
        bwf(bw) = 255;     
        cdB = uint8(cdB);       
  

评论

共有 条评论