【参考】
>"ブロック構造体" は、ブロック データなどのブロックに関する情報を含む MATLAB 構造体です。
【回答】
>①cropAndSaveBlock.mのfileNameをいじってもうまくいきません(iがコードに属する変数ではないため?)
「本コード」と「cropAndSaveBlock関数」のスコープが異なる為、互いの変数にアクセス出来ないのです。
- 「本コード」のスコープは「ベースワークスペース」
- 「cropAndSaveBlock関数」のスコープは「関数ワークスペース」
>②cropAndSaveBlock.mの中身を本コードに直接書けばファイル名にiを入れられますが、brockproc関数はそのようなことが可能ではないという理解であっていますか(やってみるとbs.locationを解決できませんといわれます)
⇒あってます。①と同じでスコープを超えられないからです。しかし代替手段はあります。上記blockproc関数の説明の通り、bs(ブロック構造体)にiを入れる為の場所が無いだけで、あるとすればブロック画像データにiを入れる方法があります。(コメントで説明します)
【対策案】
2つの案を検証しました。2番目のevalin関数の方が簡単で無駄がありませんでした。
- (下図参照)ブロック画像データに4層目を作り、そこにiを入れcropAndSaveBlock関数に渡す(コメントで追記します)
- evalin関数によりcropAndSaveBlock関数内からベースワークスペースのiを参照する方法
2番目の方法を検証しました。3行目を変更しています
function cropAndSaveBlock(bs)
save_loc = 'D:\easypcctest\20220408\cuts';
fileName = [save_loc, '\img', int2str(evalin("base","i")), 'cut', int2str(bs.location(1)), '_', int2str(bs.location(2)), '.jpg'];
imwrite(bs.data, fileName)