プロが教える店舗&オフィスのセキュリティ対策術

カメラで撮影中の映像をキーを何も押していない場合はグレースケール変換を行い、何かしらのキーが押されたらflip変換を行うといったプログラムを書いているのですが、「キーを何も押していない」というのはどのように書いたらいいかが分かりません。
現在、書いているプログラムです

#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;
string win_src = "src";
string win_dst = "dst";

int main(int argc, char **argv)
{
Mat img_src, img_dst;
VideoCapture capture(0);
if (!capture.isOpened()) {
cout << "error" << endl;
return -1;
}

namedWindow(win_src, CV_WINDOW_AUTOSIZE);
namedWindow(win_dst, CV_WINDOW_AUTOSIZE);


while (1){
capture >> img_src;

imshow(win_src, img_src);

if (getkey = 0){
cvtColor(img_src, img_dst, CV_RGB2GRAY);
imshow(win_dst, img_dst);
}

else if (waitKey(1) == '1') {
flip(img_src, img_dst, 1);
imshow(win_dst, img_dst);
}

      else if (waitKey(1) == 'q') break;

}
return 0;
}

 if (getkey = 0) をキーが入力されていない時としたいので、どう書けばいいか教えてください。
環境は Visual Studio 2013、Win8.1です。

A 回答 (1件)

http://opencv.jp/opencv-2svn/cpp/user_interface. …
マニュアルに書いてあります。


なお、現状のプログラムでは、qを押しても
else if (waitKey(1) == '1') { ←この待ち時間でqの入力を検出
}
else if (waitKey(1) == 'q') break;← この待ち時間では、もうqは検出されない
ということが発生する可能性があります。

int keycode ;

keycode=waitkey(1) ; ←ループ毎に、ここで1回だけキー入力を待つ
if (keycode== ... ) ←以下、上で読み込んだkeycodeで判定する

という形にするのがよいでしょう。
    • good
    • 1
この回答へのお礼

助かりました

説明が付いたサイトを教えていただきありがとうございます。
また、その他の問題点とその解決方法も示していただきありがとうございます。

お礼日時:2016/07/28 09:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!