videoWrite​rによる動画出力の高​速化について

조회 수: 22 (최근 30일)
HanaHana
HanaHana 2024년 10월 16일
댓글: HanaHana 2024년 10월 25일 0:20
対象物の自動検出と追従する動画解析を行っています。解析して対象物に色を塗ったり、線を書き加えるなどして動画出力をしています。
動画出力する際に、どうしても時間を要すために、高速化の方法があればご教授ください。
以下の方法は実践済です。
・フレームレイト調整
・MPEG-4での出力
・画像の縮小
★「imshow」を行うことに時間がかかっているのですが、これは外せないでしょうか・・・
★解析結果(対象物の座標)の取得のみまず行い、動画の作成は後で行うために別変数で保存する方法などもあればお教えください。
% 解析動画読み込み
vidObj = VideoReader("video.mp4");
% 出力動画ファイル
VideoWriter(strcat('trackSoftAlphaVer2_',sprintf(filename)),
% 1frameずつ読み込み&解析
while hasFrame(vidObj)
img = readFrame(vidObj);
~~~~~~~~~~~~~~~~~~~~~
% imgに対する解析
% 目標物の座標(X, Y)を算出
% 画像内の直線の軌跡(Line)を算出
~~~~~~~~~~~~~~~~~~~~~
figure('Visible', 'off');
imshow(img); hold on
scatter(X, Y);
plot(Line);
hold off
vidImg = getframe(gcf);
writeVIdeo(outVideo, vidImg);
end

채택된 답변

Kojiro Saito
Kojiro Saito 2024년 10월 17일
プロファイラーをかけてみたところ、imshowとgetframe、そしてfigureの処理時間が掛かっています。
現在のコードでは画像を表示してからscatterとplotをおこなっているので、getframeで画像を取得する必要があり、imshowも必要になります。figureは毎回作成する必要ないので、これをwhileの外に置くだけで処理時間がかなり速くなります。
figure('Visible', 'off');
% 1frameずつ読み込み&解析
while hasFrame(vidObj)
% TODO
end
また、Computer Vision Toolboxを使用できるならinsertShapeinsertMarkerでplotとscatterに近いことができ、画像上に直接描けるのでより高速に実現できます。
vidObj = VideoReader("xylophone_video.mp4");
% 出力動画ファイル
outVideo = VideoWriter("out4.mp4", "MPEG-4");
open(outVideo)
figure('Visible', 'off');
% 1frameずつ読み込み&解析
while hasFrame(vidObj)
img = readFrame(vidObj);
%~~~~~~~~~~~~~~~~~~~~~
% imgに対する解析
% 目標物の座標(X, Y)を算出
% 画像内の直線の軌跡(Line)を算出
%~~~~~~~~~~~~~~~~~~~~~
X = randi(100);
Y = randi(100);
RGB = insertMarker(img, [X Y], "circle", MarkerColor="b");
lineData = reshape([0:100 0:100], [], 2);
RGB = insertShape(RGB, "line", lineData, ShapeColor="b");
writeVideo(outVideo, RGB);
end
close(outVideo)
  댓글 수: 10
Kojiro Saito
Kojiro Saito 2024년 10월 24일 0:40
座標軸 (axes)がFigure に対して余白を持つためですね。
ax1 を定義するところで、Positionプロパティで開始位置を0、横幅と縦幅を1に設定してFigure の全領域を使うように設定してみてください。
%ax1 = gca;
ax1 = axes(fig, 'Position', [0, 0, 1, 1]);
ax2 = axes(fig, 'Position', [0.75, 0.75, 0.2, 0.2]);
ax2 の位置がやや左寄りになってしまうので、こちらのPosition の値も調整してみました。
HanaHana
HanaHana 2024년 10월 25일 0:20
無事にサイズが安定しました。
幅広い領域にわたりご助言ありがとうございました。勉強になりました。

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 ビッグ データの処理에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!