cv::waitKeyで無理やり矢印キーを使う

cv::waitKeyで矢印キーを使いたいがよくわからないそんなときに役立つ値を列挙

  // 矢印キー
  const int CV_WAITKEY_CURSORKEY_TOP    = 2490368;
  const int CV_WAITKEY_CURSORKEY_BOTTOM = 2621440;
  const int CV_WAITKEY_CURSORKEY_RIGHT  = 2555904;
  const int CV_WAITKEY_CURSORKEY_LEFT   = 2424832;
  // エンターキーとか
  const int CV_WAITKEY_ENTER            = 13;
  const int CV_WAITKEY_ESC              = 27;
  const int CV_WAITKEY_SPACE            = 32;
  const int CV_WAITKEY_TAB              = 9;

ほぼASCIIコード
そして、使い方

#include <opencv2/opencv.hpp>

int main(int argc, char *argv[]) {

  const int CV_WAITKEY_CURSORKEY_TOP    = 2490368;
  const int CV_WAITKEY_CURSORKEY_BOTTOM = 2621440;
  const int CV_WAITKEY_CURSORKEY_RIGHT  = 2555904;
  const int CV_WAITKEY_CURSORKEY_LEFT   = 2424832;
  const int CV_WAITKEY_ENTER            = 13;
  const int CV_WAITKEY_ESC              = 27;
  const int CV_WAITKEY_SPACE            = 32;
  const int CV_WAITKEY_TAB              = 9;

  cv::Mat image = cv::imread("image.jpg", 1);
  cmcv::imshowAndwaitkey("画像", image);

  int c = -1;

  while(true) {

// 入力確認用
//    if(c != -1)
//      std::cout << c << std::endl;

    switch(c){
    case CV_WAITKEY_CURSORKEY_TOP:
      std::cout << "↑" << std::endl;
      break;
    case CV_WAITKEY_CURSORKEY_LEFT:
      std::cout << "←" << std::endl;
      break;
    case CV_WAITKEY_CURSORKEY_RIGHT:
      std::cout << "→" << std::endl;
      break;
    case CV_WAITKEY_CURSORKEY_BOTTOM:
      std::cout << "↓" << std::endl;
      break;
    default:
      break;
    }
    if(c == CV_WAITKEY_ENTER) break;
    if(c == CV_WAITKEY_ESC) break;
    c = cv::waitKey(30);

  }

  return 0;
}


本家と衝突はしないがもっと別の名称使うべきだとは思ってる
もっと他の綺麗なやり方があるはずだけど調べるのが面倒
ただ、無入力のときに-1が変数cに入っていることを初めて知ったのである