avicmp.m
AVI ファイルの映像比較をする.処理速度は遅い.
コード
% 映像入力 defaultpath = 'c:\data\video\'; [ fname, dpath, filterindex ] = uigetfile( ... {'*.avi', 'AVI Files (*.avi)'; ... '*.*', 'ALL Files (*.*)'} , ... 'select file1', defaultpath); if ( filterindex ~= 0 ) file1 = fullfile( dpath, fname ); fprintf( 1, 'file1: %s\n', file1); else disp( 'file1: error'); return; end [ fname, dpath, filterindex ] = uigetfile( ... {'*.avi', 'AVI Files (*.avi)'; ... '*.*', 'ALL Files (*.*)'} , ... 'select file2', defaultpath); if ( filterindex == 1 ) file2 = fullfile( dpath, fname ); fprintf( 1, 'file2: %s\n', file2); else disp( 'file2: error'); return; end % ハンドル video1 = mmreader( file1 ); disp( 'video1: loaded' ); video2 = mmreader( file2 ); disp( 'video2: loaded' ); % フレーム数比較 num1 = get( video1, 'numberOfFrames' ); fprintf( 1, 'video1: %d\n', num1); num2 = get( video2, 'numberOfFrames' ); fprintf( 1, 'video2: %d\n', num2); if ( num1 == num2 ) disp( 'numberOfFrames: ok' ); else disp( 'ng' ); return; end % フレーム比較 for n = 1 : num1 % そのままでは uint8 なので,符号付きにする. % 差をとるので,サイズを大きくする. frame1 = int16( read ( video1, n ) ); frame2 = int16( read ( video2, n ) ); frame1 = frame1 - frame2; % 非ゼロ要素があれば最初の添え字を得る.ないとき empty if ( isempty( find( frame1 , 1) ) ~= 1 ) % 非ゼロ要素があるとき,終了 fprintf( 1, 'isempty: find: %d\n', n); disp( 'avicmp.m: ng'); return; end end disp( 'avicmp.m: ok');