struct を高速化のため事前割り当てしたい。
12 views (last 30 days)
Show older comments
ビデオの読み取りをして表示を行っています。
i=1;
while hasFrame(Movie)
DisplayMov(i) = im2frame(readFrame(Movie)); ←事前割当をしたい
i = i + 1
end
変数サイズがループごとに変更されているため事前割当をしたいのですが,structに任意の数字を行列で入れることはdouble→structが出来ないため出来ません。
他に事前割当を行う方法はないですか
0 Comments
Accepted Answer
Hiroshi Iwamura
on 10 May 2023
Moved: Atsushi Ueno
on 11 May 2023
VideoReader オブジェクトを作成すれば簡単にできるかと思います。
videoObject = VideoReader('xylophone.mp4')
videoAll = read(videoObject);
size(videoAll)
startFrame = 100; endFrame = 110;
videoParts = read(videoObject,[startFrame endFrame]);
size(videoParts)
imshow(videoParts(:,:,:,1))
3 Comments
Hiroshi Iwamura
on 10 May 2023
Moved: Atsushi Ueno
on 11 May 2023
ビデオは1-3次元目までが固定サイズなので通常の mat になっていれば良いと思ったのですが、movie() とかで再生したいと言うことですかね?
struct の事前割り当ては videoObject.NumFrames を使えばできます。
videoObject = VideoReader('xylophone.mp4');
DisplayMov(videoObject.NumFrames) = struct('cdata',[],'colormap',[])
i=1;
while hasFrame(videoObject)
DisplayMov(i) = im2frame(readFrame(videoObject));
i = i + 1;
end
disp(i-1)
axis off
movie(DisplayMov)
More Answers (0)
See Also
Categories
Find more on スプレッドシート in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!