1.软件版本
MATLAB2010b
2.本算法理论知识
算法流程如下所示:
读取avi视频 :get_AVI.m
获取灰度视频:vedio_op.m
运动员跟踪 :func_man_catch.m
计算坐标 :func_get_position.m
注意点:你写论文的时候,需要的理论也就是保持框图中的几个方面:灰度图的应用;差分;二值;连通图的处理等知识。
3.部分核心代码
clc;%清除指令窗口的现实
clear;%清除内存
close all;%关闭所有图像
warning off;%关闭警告
tic;%开始计算运行时间
%进行视频读取(这里视频读取为15帧/S,为了计算方便,只运行27帧)
%运行过程会导致仿真异常缓慢
%选择视频01,那么对于的select也选择1,使其能保持到不同的文件中
select = 3;%选视频编码
[Obj,frameNum_Original] = get_AVI('source\03.AVI');%读取视频
%01.AVI选取的值
if select == 1
start = 36;%读取视频的起始位置
frameNum = 27;%读取视频的长度
sel_area = 200;%定义视频中运动员的最小面积用于区分是物体还是运动员
end
%02.AVI选取的值
if select == 2
start = 1;%读取视频的起始位置
frameNum = 27;%读取视频的长度
sel_area = 600;%定义视频中运动员的最小面积用于区分是物体还是运动员
end
%03.AVI选取的值
if select == 3
start = 1;%读取视频的起始位置
frameNum = 30;%读取视频的长度
sel_area = 100;%定义视频中运动员的最小面积用于区分是物体还是运动员
end
pixel = vedio_op(Obj,start,frameNum); %获取处理视频的灰度视频
pixel_rgb = vedio_op_rgb(Obj,start,frameNum);%获取处理视频
[L2,L3,people,Xcenters,Ycenters,d,bw] = func_man_catch(pixel,frameNum,sel_area);%运动员的提取
[pixel2,pixel3] = func_position(L2,L3,pixel_rgb,frameNum); %获得定位后的视频
[X1,X2,Y1,Y2]=func_get_position(frameNum,pixel3);%到处运动员的坐标位置信息
implay(pixel_rgb);%播放被处理的视频
implay(pixel); %灰度视频
implay(d); %差分图
implay(bw); %二值图
implay(L2); %分割1
implay(L3); %分割2
implay(pixel2); %播放处理过程的分割图
implay(pixel3); %处理最后的分割结果
if select == 1
aviFileName = 'save_source\01\01.avi'; %保存视频的名称
framesPerSec =15; %保存视频的没秒帧数
aviobj = avifile(aviFileName,'fps',framesPerSec,'COMPRESSION','NONE');%定义保存视频
for i=1:frameNum
aviobj = addframe(aviobj, pixel_rgb(:,:,:,i));%开始写入保存文件
end
aviobj = close(aviobj);%保存完毕后关闭
aviFileName = 'save_source\01\01_white.avi'; %保存视频的名称
framesPerSec =15; %保存视频的没秒帧数
aviobj = avifile(aviFileName,'fps',framesPerSec,'COMPRESSION','NONE');%定义保存视频
for i=1:frameNum
aviobj = addframe(aviobj, pixel2(:,:,:,i));%开始写入保存文件
end
aviobj = close(aviobj);%保存完毕后关闭
end
if select == 2
aviFileName = 'save_source\02\02.avi'; %保存视频的名称
framesPerSec =15; %保存视频的没秒帧数
aviobj = avifile(aviFileName,'fps',framesPerSec,'COMPRESSION','NONE');%定义保存视频
for i=1:frameNum
aviobj = addframe(aviobj, pixel_rgb(:,:,:,i));%开始写入保存文件
end
aviobj = close(aviobj);%保存完毕后关闭
aviFileName = 'save_source\02\02_white.avi'; %保存视频的名称
framesPerSec =15;%保存视频的没秒帧数
aviobj = avifile(aviFileName,'fps',framesPerSec,'COMPRESSION','NONE');%定义保存视频
for i=1:frameNum
aviobj = addframe(aviobj, pixel2(:,:,:,i));%开始写入保存文件
end
aviobj = close(aviobj);%保存完毕后关闭
end
if select == 3
aviFileName = 'save_source\03\03.avi';%保存视频的名称
framesPerSec =15;%保存视频的没秒帧数
aviobj = avifile(aviFileName,'fps',framesPerSec,'COMPRESSION','NONE');%定义保存视频
for i=1:frameNum
aviobj = addframe(aviobj, pixel_rgb(:,:,:,i));%开始写入保存文件
end
aviobj = close(aviobj);%保存完毕后关闭
aviFileName = 'save_source\03\03_white.avi'; %保存视频的名称
framesPerSec =15;%保存视频的没秒帧数
aviobj = avifile(aviFileName,'fps',framesPerSec,'COMPRESSION','NONE');%定义保存视频
for i=1:frameNum
aviobj = addframe(aviobj, pixel2(:,:,:,i));%开始写入保存文件
end
aviobj = close(aviobj);%保存完毕后关闭
end
if select == 1
save XY_Position\01\x.mat X1 X2%保存坐标
save XY_Position\01\y.mat Y1 Y2%保存坐标
end
if select == 2
save XY_Position\02\x.mat X1 X2%保存坐标
save XY_Position\02\y.mat Y1 Y2%保存坐标
end
if select == 3
save XY_Position\03\x.mat X1 X2%保存坐标
save XY_Position\03\y.mat Y1 Y2%保存坐标
end
toc%统计代码的运行时间
4.操作步骤与仿真结论
运行MATLAB,可以得到三个视频:
这个视频是原始的视频。
这个是分割矩阵的视频。
这个是分割后的视频。
运行FLASH:
五个功能按钮的功能为:
第一个:关闭分割窗口;
第二个:打开分割窗口;
第三个:播放flash;
第四个:暂停播放;
第五个:退出FLASH视频;
分别对三个视频进行测试:
5.参考文献
使用进行视频测试
A10-08
6.完整源码获得方式
方式1:微信或者QQ联系博主