一.代码如下:
第一个函数代码如下:
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
※整体的程序并没有做人体形态处理和噪点的去除,后期还需要改进。
因篇幅问题不能全部显示,请点此查看更多更全内容