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

32 Ansichten (letzte 30 Tage)
HanaHana
HanaHana am 16 Okt. 2024
Kommentiert: HanaHana am 25 Okt. 2024 um 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

Akzeptierte Antwort

Kojiro Saito
Kojiro Saito am 17 Okt. 2024
プロファイラーをかけてみたところ、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 Kommentare
Kojiro Saito
Kojiro Saito am 24 Okt. 2024 um 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 am 25 Okt. 2024 um 0:20
無事にサイズが安定しました。
幅広い領域にわたりご助言ありがとうございました。勉強になりました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu ビッグ データの処理 finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!