歯を検出後に、if文を使ってメッセージを表示する
조회 수: 1 (최근 30일)
이전 댓글 표시
【目と口と歯を検出する→もし、目と口と歯を検出したらメッセージを表示しない→もし、目と口は検出され歯を検出できなかったら、「Hello world」とメッセージを表示する】というif文を用いたプログラムを作成したいのですが、歯を検出するプログラムの作成の時点でつまづいてしまいました。
わかる方がいらっしゃいましたら、ご教授頂けると幸いです。
댓글 수: 1
Kojiro Saito
2021년 5월 6일
分岐処理のif、else、elseifを使うと良さそうですが、目と口と歯の検出でどのようなプログラムを書いていて、具体的にどこでつまづいているのかをシェアいただければ、的確に回答しやすくなります。
채택된 답변
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
2021년 5월 10일
的外れな回答だったら申し訳ありません。近いタイミングで類似の質問が出ていたのでリンクを貼っておきます。イメージラベラーを利用して目,口,歯を検出した時に文を表示する方法 - MATLAB Answers - MATLAB Central (mathworks.com)
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 測定と特性抽出에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!