歯を検出後に、if文を使ってメッセージを表示する

5 ビュー (過去 30 日間)
竣 齊藤
竣 齊藤 2021 年 5 月 5 日
コメント済み: 竣 齊藤 2021 年 5 月 15 日
【目と口と歯を検出する→もし、目と口と歯を検出したらメッセージを表示しない→もし、目と口は検出され歯を検出できなかったら、「Hello world」とメッセージを表示する】というif文を用いたプログラムを作成したいのですが、歯を検出するプログラムの作成の時点でつまづいてしまいました。
わかる方がいらっしゃいましたら、ご教授頂けると幸いです。
  1 件のコメント
Kojiro Saito
Kojiro Saito 2021 年 5 月 6 日
分岐処理のif、else、elseifを使うと良さそうですが、目と口と歯の検出でどのようなプログラムを書いていて、具体的にどこでつまづいているのかをシェアいただければ、的確に回答しやすくなります。

サインインしてコメントする。

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 5 月 10 日
何かを検出するプログラムの内容は不明ですが、if文の使用方法については下記のように回答できます。
検出結果が「検出した」と「検出できなかった」の2通りの場合、2の3乗=8通りの組み合わせがあります。
その8通りをそのままif文で愚直に判断していけば、全ての組み合わせを判断できます。
% eyes = detect_eyes(); % eyesは目の検出結果で、TrueかFalseの2値を持つブール型とします
% mouth = detect_mouth(); % mouthは口の検出結果で、TrueかFalseの2値を持つブール型とします
% teeth = detect_teeth(); % teethは歯の検出結果で、TrueかFalseの2値を持つブール型とします
eyes = true; % とりあえず仮定します
mouth = true; % とりあえず仮定します
teeth = false; % とりあえず仮定します
if (eyes && mouth && teeth)
disp(''); %→もし、目と口と歯を検出したらメッセージを表示しない
elseif (eyes && mouth && ~teeth) % ~(チルダ記号)はNOT(真偽の反転)を意味します
disp('Hello world'); %→もし、目と口は検出され歯を検出できなかったら、「Hello world」とメッセージを表示する
elseif (eyes && ~mouth && teeth) %
disp('目と歯は検出され口を検出できなかった');
elseif (eyes && ~mouth && ~teeth) %
disp('目は検出され口と歯を検出できなかった');
elseif (~eyes && mouth && teeth) %
disp('口と歯は検出され目を検出できなかった');
elseif (~eyes && mouth && ~teeth) %
disp('口は検出され目と歯を検出できなかった');
elseif (~eyes && ~mouth && teeth) %
disp('歯は検出され目と口を検出できなかった');
else % 残りはif(~eyes && ~mouth && ~teeth)だけなので省略
disp('目と口と歯の全てを検出できなかった');
end
上記の例では、目と口は検出され歯を検出できなかった場合なので「Hello world」とメッセージを表示します。
上記プログラムの様に毎回3つの条件を全て書けば、不要な条件の組み合わせを除いても正しく動作します。
しかしながらif-else文で上記の様に書くとプログラムが煩雑になるので、3つのブール値を数値に変換してSwitch文で処理するなど工夫すればよりスッキリした形になります。
if文の中に「検出するプログラム」を書くと煩雑になるので、上記のようにそれぞれを検出するプログラムを関数に分けて書けばよりスッキリした形になります。
  2 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 5 月 10 日
的外れな回答だったら申し訳ありません。近いタイミングで類似の質問が出ていたのでリンクを貼っておきます。イメージラベラーを利用して目,口,歯を検出した時に文を表示する方法 - MATLAB Answers - MATLAB Central (mathworks.com)
竣 齊藤
竣 齊藤 2021 年 5 月 15 日
ご回答していただき、ありがとうございます。
参考にさせていただきます。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeプログラミング についてさらに検索

Community Treasure Hunt

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

Start Hunting!