ビデオをインポートし、フレーム単位で特定の領域のDCT係数を取り込むコードを書きました。別の機能。これを個別に行うとうまくいきますが、私は200以上のビデオファイルで作業しているので、コードのバッチバージョンを実装しようとしました。バッチ処理ビデオ(Matlab) - 問題
しかし、ループを通過するたびに間違ったファイルが出力されるという問題があります。次の反復におけるフレームの数が少ないフレームを有する場合、それは前のフレームに書き込む。私はそれが実行される前に私のforループの一つを初期化する必要があると言われました。しかし、私はこれを行う方法は確信している、私は問題が2番目のループにあると思うが、私はよく分からない。
ご意見をいただければ幸いです!
files = dir('Videos/*.mov');
for m = 1:numel(files);
readerobj = mmreader(files(m).name);
vidFrames = read(readerobj);
numFrames = get(readerobj, 'numberOfFrames');
% Create a MATLAB movie struct from the video frames.
for k = 1 : numFrames
mov(k).cdata = vidFrames(:,:,:,k);
mov(k).colormap = [];
end
firstFrame = mov(1).cdata;
rect = [172,225,271,143;];
numFrames = length(mov);
dctCoeff = zeros((10*10),numFrames);
for i = 1 : numFrames
frameImage = imcrop(mov(i).cdata, rect);
frameImage = rgb2gray(frameImage);
dctImage = dct2(frameImage);
dctImage = dctImage(1:10,1:10);
dctCoeff(:,i) = reshape(dctImage,1,(10*10));
end
sRate = (1/29.9701)*1e7;
[status, error] = htk_write_mfc(files(m).name, size(dctCoeff,2),sRate,4*size(dctCoeff,1),9,dctCoeff);
status
error
end
今すぐ動作します!あなたに助けてくれてありがとう! – FredBones