関数の呼び出し中に出​力引数が代入されない​エラーを回避するには​どうしたらよいのでし​ょうか

조회 수: 8 (최근 30일)
Astro boy
Astro boy 2021년 9월 29일
답변: Astro boy 2021년 10월 4일
こんにちは,私は主題のタイトルのエラーと現在格闘しています.バージョンは2021aを使用しています.
やりたい処理として
①画像上に水平な線分を描く
②水平線分が矢印キー上と下を押すことでそれぞれ上下に移動する
③qキーを押して移動した水平線分ピクセル値を,画像をクリックして読み取る
となっています.
しかし下記の作成したコードをもとに実行を行うと
出力引数 "pix" (および他の引数もおそらく) は "lineplot" の呼び出し中に代入されていません。
エラー: main (行 6)
pix=lineplot(J);
と表示されます.
エラー文の内容を調べたところ,「関数内で例外が発生すると出力引数が未定義になる」とあったのですが,いまいちよくわかりません.
ここでいう例外にあたるケースはどういった場合なのでしょうか,またどういった対策をすればよいのでしょうか,解答よろしくお願いいたします.
-----------------------------------------------------
%メインのプログラム
function main()
close
%画像の読み取り
J=imread('corn.tif');
pix=lineplot(J);
----------------------------------------------------
%画像上に水平線分の描画と移動を行う関数
function pix=lineplot(J)
fig=figure;
ax=axes;
ypixh=size(J,1)/2;
I=imshow(J,'Parent',ax);
axis ([0 size(J,2) 0 size(J,1)]);
%水平線分の描画
line=yline(ypixh,'--.r','LineWidth',3);
%キーが押されると実行する関数
fig.KeyPressFcn = {@my_callback};
function my_callback(src,data)
%矢印キー上が押されると水平線分が上に移動
if strcmp(data.Key,'uparrow')
ypixh=ypixh-10;
linemove(J,ypixh,ax);
end
%矢印キー下が押されると水平線分が下に移動
if strcmp(data.Key,'downarrow')
ypixh=ypixh+10;
linemove(J,ypixh,ax)
end
%qキーを押して水平線分上のピクセル値を読み取り
if strcmp(data.Key,'q')
pix=clickimage(J)
end
end
end
-----------------------------------------------------
%画像をクリックしてピクセル値を読み取る関数
function pix=clickimage(J)
roi=drawpoint;
%画像クリックでピクセル値読み取り
pix=roi.Position;
end
-----------------------------------------------------
%linemove関数
function linemove(J,ypixh,ax)
I=imshow(J,'Parent',ax);
axis ([0 size(J,2) 0 size(J,1)]);
line=yline(ypixh,'--.r','LineWidth',3);
end

채택된 답변

Kojiro Saito
Kojiro Saito 2021년 9월 30일
関数lineplotが最初に実行されるとき、fig.KeyPressFcnの部分のキーが押された場合の処理が未実施で終了するため、lineplotの出力pixに何も値が入らず、定義されていない状態になっているためこのエラーが生じています。
キーが押されない場合はpixに初期値を入れるように変更してみてはいかがでしょうか。
例:
function pix=lineplot(J)
pix = [0 0]; % 初期値
fig=figure;
% 以下同様

추가 답변 (1개)

Astro boy
Astro boy 2021년 10월 4일
キーが押されていない場合が未定義になるんですね.
初期値を入れてみるようにします.迅速な回答ありがとうございました.

Community Treasure Hunt

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

Start Hunting!