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

4 vues (au cours des 30 derniers jours)
敬
le 28 Mai 2023
Commenté : le 29 Mai 2023
動画をフレーム毎に読みだして、グレースケールに変換に変換し、トリミングしようとしています。長方形にトリミングしようとしていますが、エラーが発生します。対処法をご教授ください。
%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)

Réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur Image Processing and Computer Vision dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!