源代码:依然是AVi格式的视频
clc; clear all; close all;
% 原始视频
[file_name,pname] = uigetfile('*.avi','Select the M-file');
% file_name = 'campus5.avi'; %视频所在文件夹
file_name=[pname file_name];
mov = VideoReader(file_name);
%mov=mmreader(targetavi);
fnum = mov.NumberOfFrames;
% fnum=size(mov,2);
%建立结果视频
two_video= VideoWriter('sanzhen.avi'); %所转换成的视频名称
writerFrames = fnum; %视频帧数
open(two_video);
% aviobj = VideoWriter(resultavi);
% aviobj.Quality = 100;
%aviobj.Fps = 25;%每秒读取25帧
%aviobj.compression='Indeo5';
%aviobj.compression='None';
%帧间差分法
for i=2:fnum-1
x=read(mov, i-1);
y=read(mov, i);
z=read(mov, i+1);
subplot(2, 2, 1); imshow(x, []); title(sprintf('第%d帧视频', i-1), 'FontWeight', 'Bold', 'Color', 'r');
sigma = 0.8;
gausFilter = fspecial('gaussian',[5 5],sigma);
x = imfilter(x,gausFilter,'replicate');
y = imfilter(y,gausFilter,'replicate');
z = imfilter(z,gausFilter,'replicate');
m=rgb2gray(x);
m=medfilt2(m);
n=rgb2gray(y);
n=medfilt2(n);
o=rgb2gray(z);
o=medfilt2(o);
q=im2double(n);
w=im2double(m);
p=im2double(o);
c=q-w;%%前两帧差分
b=p-q;%%后两帧差分
t=18; %%阈值,此值可以调节
t=t/256;%%转化为double型数据
k=find(abs(c)>=t);%%find函数作用是找到图c中的值大于t的点坐标
d=find(abs(b)>=t);%%find函数作用是找到图b中的值大于t的点坐标
c(k)=255;%%二值化的一
b(d)=255;
k=find(abs(c) d=find(abs(b) c(k)=0;%%二值化的零 b(d)=0; f=c&b; subplot(2, 2, 2); imshow(f, []); title(sprintf('第%d帧二值识别结果', i-1), 'FontWeight', 'Bold', 'Color', 'r'); se90 = strel('line',7,90); % 第一个结构元素线型90度 se0 = strel('line',6,0); % 第二个结构元素线型0度 out = imdilate(f, [se90 se0]); % 膨胀前景图 se = strel('disk',5); % 第二个结构元素 out = imopen(out,se); % 开运算去除噪点 out = imclose(out,se); subplot(2, 2, 3); imshow(out, []); title(sprintf('第%d帧优化识别结果', i-1), 'FontWeight', 'Bold', 'Color', 'r'); out=~out; x1 = x(:, :, 1); x2 = x(:, :, 2); x3 = x(:, :, 3); x1(out) = 0; x2(out) = 0; x3(out) = 0; xc = cat(3, x1, x2, x3); subplot(2, 2, 4); imshow(xc, []); title(sprintf('第%d帧视频捕捉结果', i-1), 'FontWeight', 'Bold', 'Color', 'r'); % imshow(f); writeVideo(two_video, xc); % adata=cat(3,f,f,f);%%灰度图像生成视频必加此句 % aviobj = addframe(aviobj,adata);%%生成视频 % hold on; % drawnow; % hold off; end close(two_video); %aviobj=close(aviobj);
閱讀更多 科研IT生活 的文章