matlab提取给定视频的背景-并根据此背景将视频中的运动物体提取出来.docxVIP

  • 45
  • 0
  • 约2.14千字
  • 约 3页
  • 2019-07-23 发布于浙江
  • 举报

matlab提取给定视频的背景-并根据此背景将视频中的运动物体提取出来.docx

提取给定视频的背景,并根据此背景将视频中的运动物体提取出来 一.代码如下: 第一个函数代码如下: clear; mov=VideoReader(1.avi);%读取视频函数 imgRgb = read(mov,1);%读取一帧视频 imgRgb1 = im2double(imgRgb);%图像数据转化为双精度 R1 = imgRgb1(:,:,1); G1 = imgRgb1(:,:,2); B1 = imgRgb1(:,:,3); q = 1; for t=2: 20 :mov.NumberOfFrames%2到帧的总数,每次以20增长 imgRgb = read(mov,t);%读取每一帧视频 subplot(221); imshow(imgRgb);%显示每一帧 drawnow;%刷新屏幕 imgRgb1 = im2double(imgRgb); R = imgRgb1(:,:,1); G = imgRgb1(:,:,2); B = imgRgb1(:,:,3); R1 = R + R1; G1 = G + G1; B1 = B + B1; q = q+1; R2 = R1*1/q; G2 = G1*1/q; B2 = B1*1/q;%每一次都取的均值 end background = cat(3,R2,G2,B2);%将矩阵合并 subplot(222); title(±3?°); imshow(background,[]);%显示背景 imwrite(background,D:\?ú?÷ó?\êó?μ′|àí????\result.jpg,jpg);%保存帧 第二个函数代码如下: clear all;%清除所有 mov = VideoReader(1.avi); %读取视频函数 imgRgb = imread(result.jpg);%读取保存帧 imgRgb1 = im2double(imgRgb);%图像数据转化为双精度 for ii =1000: 20 :mov.NumberOfFrames%从1000到帧的总数,以20为增量作为循环 zhen = read(mov,ii);%读的帧的图像 subplot(221) title(vision); imshow(zhen);%显示zhen的图像 drawnow; %刷新屏幕 zhen1 = im2double(zhen);%将zhen的图像变为双精度 cha = zhen1 - imgRgb1; %cha为实际图像与底图的差值 cha1=im2bw(cha,0.2);%将灰度图像转化为二值图像,而设置的阀值为0.2 for i = 1 : 240; for j = 1 : 320; if(i (-j+180)) cha1(i,j) = 0; end end end cx = 0; cy = 0; nn = 0; for i = 1 : 240; for j = 1 : 320; if(cha1(i,j)==1) cx = cx+i; cy = cy+j; nn = nn+1; end end end %这个程序写的有问题nn的值再变,不是一直是1. if(nn0) fx = round(cx/nn);%四舍五入取整 fy = round(cy/nn); %四舍五入取整 fprintf(第一个点(%d,%d)\n , fy,(240-fx) ); subplot(223) grid on; title(rule); axis([0 320 0 240]); plot(fy,(240-fx).); %显示二维数组,但是因为程序循环的问题,并没有打印出来。 drawnow; hold on; end subplot(222) imshow(cha1,[]); %显示二值图像 drawnow; end 二.后期的处理 不屏蔽写上部

文档评论(0)

1亿VIP精品文档

相关文档