動画トリミングの際のエラー

12 ビュー (過去 30 日間)
敬
2023 年 5 月 28 日
コメント済み: 2023 年 5 月 29 日
動画をフレーム毎に読みだして、グレースケールに変換に変換し、トリミングしようとしています。長方形にトリミングしようとしていますが、エラーが発生します。対処法をご教授ください。
%FEP動画のフレームを読み込み、グレースケール変換
vfep = VideoReader("C:\Users\user\MATLAB Drive\Examples\Ultrasonic_analysis\4852fep_20230512.avi");
%各フレームをグレースケールに変換する
k=1;
while hasFrame(vfep)
mvfep(:,:,:,k) = readFrame(vfep);
gray_mvfep(:,:,1,k) = rgb2gray(mvfep(:,:,:,k));
%rectを定義してトリミング
rect=images.spatialref.Rectangle([196.5 677.0],[217.5 227.0])
CI2(:,:,1,k)=imcrop(gray_mvfep(:,:,1,k),rect)
imtool(CI2(:,:,1,k),'InitialMagnification','fit');
k=k+1;
end
(エラー)
rect =
Rectangle のプロパティ:
XLimits: [196.5000 677]
YLimits: [217.5000 227]
左辺のサイズが 51x449 で右辺のサイズが 10x481 であるため、代入を実行できません。
エラー: untitled (10)
CI2(:,:,1,k)=imcrop(gray_mvfep(:,:,1,k),rect)

回答 (1 件)

Atsushi Ueno
Atsushi Ueno 2023 年 5 月 28 日
CI2(:,:,:,:)はプログラムの別の箇所で既に使用した変数です。エラーメッセージに出てくる 51x449 というサイズ情報は、CI2の最初の2次元のサイズの事です。ここにトリミング画像(10x481)を代入しようとしてもサイズが合わないという事です。対策1や2の様に新規の変数を使うと、コロン演算子を使う事でサイズ指定をしなくても済みますが、一度サイズの決まった変数に対しては、どこからどこまでの場所に代入するのかを指定する必要があります。
  • 対策その1:新規の変数を使えば、今のプログラムのままで問題ありません
  • 対策その2:既存の変数CI2をclearすれば、上記の新規変数と同様に扱えます
  • 対策その3:既存の変数CI2にトリミングした画像を埋め込むのであれば、10行目のCI2(:, :, ...)の場所に「x座標いくつからいくつまで」「y座標いくつからいくつまで」を指定する必要があります。その際、左辺のサイズと右辺のサイズはピッタリ合致する必要があります。
  1 件のコメント
敬
2023 年 5 月 29 日
早速ありがとうございます。試してみようと思います。

サインインしてコメントする。

カテゴリ

Help Center および File Exchangeイメージ についてさらに検索

Community Treasure Hunt

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

Start Hunting!