2016-05-26 2 views
0

matlabのgetline機能を使用して写真に線を描きます。さまざまな写真では、各写真に何本の線を描く必要があるかわかりません(いくつかの写真では10本の線を描き、いくつかは写真の中身に応じて20本描く必要があります)。現在、私はコードの下に使用しています:私はforloopを定義すると、上記のコードでは example picmatlab for "loop"をキーボード入力やマウスクリックで終了できますか?

a=imread('cameraman.jpg'); 
a=imshow(a) 

for i=1:5 
    [x,y]=getline 
    xy=[x,y]; 
    x1=xy(1,1); 
    y1=xy(1,2); 
    x2=xy(2,1); 
    y2=xy(2,2); 
    P1=[x1,x2]; 
    P2=[y1,y2]; 

    line(P1,P2); 
end 

を、私は多くのように線を引くことができます。ここでは写真に5行を描くことができます。私が前もって描画しなければならない線の数を知ることができないので、非常に大きな終点(例えばfor i=1:500)を持つforloopを定義して何度も繰り返します。しかし、もし私が私のラインで完成すれば、私はforループを終了する必要があります(間違いなく500ループ前に終了します。 !

(私はginputに、我々は我々の仕事を終えたときに「復帰」を押すことでクリックを停止できることをPSを知っている)。

答えて

0

私が代わりにためのループの whileループを使用します。してみましょうwhileループは、ユーザーが任意のポイントをクリックせずにEnterキーを押すまで実行されます(例:

a=imread('cameraman.jpg'); 
imshow(a) 
x=0; y=0; 
disp('Draw lines on the photo') 
disp('Press <enter> with no line to exit') 
while ~isempty(x) 
    [x,y]=getline 
    % [insert your code] 

    % code repeats until the user presses <enter> 
    % without clicking any points on the figure 
end 
disp('exit') 
+0

ありがとう@mhopeng。それは完全に動作します。 – Teddy

+0

こんにちは@ mhopeng ..私は '[x、y] = getline'の代わりに 'imfreehand'関数を使用しようとしています。私のコマンドは 'h = imfreehand()'です。だから私はコードを 'h = 0; while〜isempty(h)​​です。 h = imfreehand();終わり。しかし、hは価値がないので、私はreturnキーを押すことで終了できません。したがって、imfreehand関数でforloopを終了するための提案。 Tks先に:) – Teddy

関連する問題