1. Versão do software
MATLAB2010b
2. Conhecimento teórico deste algoritmo
O fluxo do algoritmo é o seguinte:
Leia o vídeo avi: get_AVI .m
Obter vídeo em tons de cinza: vedio_op .m
Acompanhamento de Atletas : func_man_catch.m
Calcular coordenadas: func_get_position .m
Nota: Quando você escreve um artigo, a teoria que você precisa é manter vários aspectos do diagrama de blocos: a aplicação de imagens em tons de cinza; diferença; binário; processamento de gráficos conectados e outros conhecimentos.
3. Parte do código principal
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. Etapas da operação e conclusão da simulação
Executando o MATLAB, você pode obter três vídeos:
Este vídeo é o vídeo original.
Este é um vídeo da matriz de segmentação.
Este é o vídeo dividido.
Executar FLASH:
As funções dos cinco botões de função são:
A primeira: feche a janela dividida;
A segunda: abra a janela dividida;
O terceiro: jogar flash;
Quarto: Pausar a reprodução;
Quinto: Sair do vídeo FLASH;
Três vídeos foram testados separadamente:
5. Referências
Use para testes de vídeo
A10-08
6. Como obter o código fonte completo
Método 1: Entre em contato com o blogueiro via WeChat ou QQ