您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > matlab提取给定视频的背景,并根据此背景将视频中的运动物体提取出来
提取给定视频的背景,并根据此背景将视频中的运动物体提取出来一.代码如下:第一个函数代码如下:clear;mov=VideoReader('1.avi');%读取视频函数imgRgb=read(mov,1);%读取一帧视频imgRgb1=im2double(imgRgb);%图像数据转化为双精度R1=imgRgb1(:,:,1);G1=imgRgb1(:,:,2);B1=imgRgb1(:,:,3);q=1;fort=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;%每一次都取的均值endbackground=cat(3,R2,G2,B2);%将矩阵合并subplot(222);title('±³¾°');imshow(background,[]);%显示背景imwrite(background,'D:\»úÆ÷Óã\ÊÓƵ´¦ÀíÔöÇ¿\result.jpg','jpg');%保存帧第二个函数代码如下:clearall;%清除所有mov=VideoReader('1.avi');%读取视频函数imgRgb=imread('result.jpg');%读取保存帧imgRgb1=im2double(imgRgb);%图像数据转化为双精度forii=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.2fori=1:240;forj=1:320;if(i(-j+180))cha1(i,j)=0;endendendcx=0;cy=0;nn=0;fori=1:240;forj=1:320;if(cha1(i,j)==1)cx=cx+i;cy=cy+j;nn=nn+1;endendend%这个程序写的有问题nn的值再变,不是一直是1.if(nn0)fx=round(cx/nn);%四舍五入取整fy=round(cy/nn);%四舍五入取整fprintf('第一个点(%d,%d)\n',fy,(240-fx));subplot(223)gridon;title('rule');axis([03200240]);plot(fy,(240-fx)'.');%显示二维数组,但是因为程序循环的问题,并没有打印出来。drawnow;holdon;endsubplot(222)imshow(cha1,[]);%显示二值图像drawnow;end二.后期的处理1.不屏蔽写上部分的后,且二值化的阈值设置为0.2的图像如图2-1二值0.2所示:图2-1二值0.22.阈值为0.4的图像如图2-2二值化0.4所示:图2-2二值0.4※整体的程序并没有做人体形态处理和噪点的去除,后期还需要改进。
本文标题:matlab提取给定视频的背景,并根据此背景将视频中的运动物体提取出来
链接地址:https://www.777doc.com/doc-4991827 .html