源代碼:依然是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生活 的文章