- 対策その1:新規の変数を使えば、今のプログラムのままで問題ありません
- 対策その2:既存の変数CI2をclearすれば、上記の新規変数と同様に扱えます
- 対策その3:既存の変数CI2にトリミングした画像を埋め込むのであれば、10行目のCI2(:, :, ...)の場所に「x座標いくつからいくつまで」「y座標いくつからいくつまで」を指定する必要があります。その際、左辺のサイズと右辺のサイズはピッタリ合致する必要があります。
動画トリミングの際のエラー
4 ビュー (過去 30 日間)
古いコメントを表示
動画をフレーム毎に読みだして、グレースケールに変換に変換し、トリミングしようとしています。長方形にトリミングしようとしていますが、エラーが発生します。対処法をご教授ください。
%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)
0 件のコメント
回答 (1 件)
Atsushi Ueno
2023 年 5 月 28 日
CI2(:,:,:,:)はプログラムの別の箇所で既に使用した変数です。エラーメッセージに出てくる 51x449 というサイズ情報は、CI2の最初の2次元のサイズの事です。ここにトリミング画像(10x481)を代入しようとしてもサイズが合わないという事です。対策1や2の様に新規の変数を使うと、コロン演算子を使う事でサイズ指定をしなくても済みますが、一度サイズの決まった変数に対しては、どこからどこまでの場所に代入するのかを指定する必要があります。
参考
カテゴリ
Help Center および File Exchange で Image Processing and Computer Vision についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!