필터 지우기
필터 지우기

struct を高速化のため事前割り当てしたい。

조회 수: 12 (최근 30일)
巧 平山
巧 平山 2023년 5월 10일
이동: Atsushi Ueno 2023년 5월 11일
ビデオの読み取りをして表示を行っています。
i=1;
while hasFrame(Movie)
DisplayMov(i) = im2frame(readFrame(Movie)); ←事前割当をしたい
i = i + 1
end
変数サイズがループごとに変更されているため事前割当をしたいのですが,structに任意の数字を行列で入れることはdouble→structが出来ないため出来ません。
他に事前割当を行う方法はないですか

채택된 답변

Hiroshi Iwamura
Hiroshi Iwamura 2023년 5월 10일
이동: Atsushi Ueno 2023년 5월 11일
VideoReader オブジェクトを作成すれば簡単にできるかと思います。
videoObject = VideoReader('xylophone.mp4')
videoObject =
VideoReader with properties: General Properties: Name: 'xylophone.mp4' Path: '/MATLAB/toolbox/matlab/audiovideo' Duration: 4.7000 CurrentTime: 0 NumFrames: <Calculating...> learn more Video Properties: Width: 320 Height: 240 FrameRate: 30 BitsPerPixel: 24 VideoFormat: 'RGB24'
videoAll = read(videoObject);
size(videoAll)
ans = 1×4
240 320 3 141
startFrame = 100; endFrame = 110;
videoParts = read(videoObject,[startFrame endFrame]);
size(videoParts)
ans = 1×4
240 320 3 11
imshow(videoParts(:,:,:,1))
  댓글 수: 3
Hiroshi Iwamura
Hiroshi Iwamura 2023년 5월 10일
이동: Atsushi Ueno 2023년 5월 11일
ビデオは1-3次元目までが固定サイズなので通常の mat になっていれば良いと思ったのですが、movie() とかで再生したいと言うことですかね?
struct の事前割り当ては videoObject.NumFrames を使えばできます。
videoObject = VideoReader('xylophone.mp4');
DisplayMov(videoObject.NumFrames) = struct('cdata',[],'colormap',[])
DisplayMov = 1×141 struct array with fields:
cdata colormap
i=1;
while hasFrame(videoObject)
DisplayMov(i) = im2frame(readFrame(videoObject));
i = i + 1;
end
disp(i-1)
141
axis off
movie(DisplayMov)
巧 平山
巧 平山 2023년 5월 11일
이동: Atsushi Ueno 2023년 5월 11일
事前割り当てできました!ありがとうございます!!
僕の説明が悪くて2度手間になってしまいましたが、丁寧な説明有難うございました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

태그

제품


릴리스

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!