0

画像を読み取り、散布図ポイントをオーバーレイし、結果のすべての画像をムービーに結合するスクリプトがあります。ただし、スクリプトを Octave で動作するように変換するのに苦労しました。ループが 1 回しか実行されないことを除いて、すべての問題を解決しました。つまり、作成されたビデオの長さは 1 フレームのみです。これはgcfと関係があるのではないかと思いますか? 私はそれを長い間見てきましたが、私が見逃している単純なものかもしれないと思います. どんな考えでも大歓迎です。

ループは次のとおりです。

for i = 1:subsamp:numel(dd)
    if (mod(i,100)==0)
        fprintf('frame %d/%d\n', i, numel(dd));
    end

    % read current image and trim its width and height to a multiple of 4
    img = imread([img_dir,'/',dd(i).name]);
    trim_x = mod(size(img,2),4);
    trim_y = mod(size(img,1),4);
    img = img(1:end-trim_y,1:end-trim_x);

    % display current image
    set(0,'CurrentFigure',hnd);
    imshow(img);

    % if there is truth for this frame, show it
    which_block = map(i);
    if (which_block > 0)
        % grab data chunk for this frame
        block = truth(starts(which_block):ends(which_block),:);
        pts = block(:,7:8);
        ids = block(:,2);

        % overlay tracks and ids
       hold on;
        scatter(pts(:,1),pts(:,2),5);
        hold off;
    end

    % add this frame to movie file
  getframe(img);

    mov = addframe(mov,frame);

end

最後にある「getframe()」関数は、オンラインで見つけたものです。次のようになります。

function frame = getframe (h)

  print ("tmp.fig", "-djpg");
  frame = im2double (imread ("tmp.fig"));
  ## Truncate to even size to accomodate addframe()
  if (mod (size (frame, 1), 2) > 0); frame = frame(2:end, :, :); endif
  if (mod (size (frame, 2), 2) > 0); frame = frame(:, 2:end, :); endif

endfunction

繰り返しになりますが、これがすべてのフレームで繰り返されるのを妨げている可能性があることに気付いた場合は、非常に感謝しています。ありがとう!!

4

0 に答える 0