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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

提取给定视频的背景,并根据此背景将视频中的运动物体提取出来
一.代码如下:
第一个函数代码如下:
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(’±³¾°’);
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(nn〉0)
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
二.后期的处理
1.不屏蔽写上部分的后,且二值化的阈值设置为0.2的图像如图2—1 二值0.2
所示:
图2-1 二值0.2
2.阈值为0。

4的图像如图2-2 二值化0.4所示:
图2-2 二值0。

4
※整体的程序并没有做人体形态处理和噪点的去除,后期还需要改进。

相关文档
最新文档