OpenCVでマウスを扱う

void cvSetMouseCallback( char* window_name, CvMouseCallback on_mouse, void* param )

ウィンドウにコールバック関数を設定する

引数

  • window_name:char*型のウィンドウの名前
  • on_mouse:CvMouseCallback型の関数のポインタ
  • param:オプションのパラメータ

返り値

  • void型なのでなし

void setMouseCallback( string& windowName, MouseCallback onMouse, void* param)

  • C++インタフェース版
  • char*からstring&に変わってるが,char*でもOK

void func(int event, int x, int y, int flags, void *paramCallback)

マウスのコールバック関数の実体

引数

  • event:int型のイベント
  • x:int型のクリックされたx座標
  • y:int型のクリックされたy座標
  • flags:int型の同時に起きたイベント
  • paramCallback:ダミー変数

返り値

  • void型なのでなし

解説

  • window_nameでウィンドウを指定.指定されたウィンドウにだけ有効.
  • on_mouseやonMouseでは関数のポインタを渡す
  • CvMouseCallback型とは void func(int event, int x, int y, int flags, void *paramCallback)のこと
  • cv::MouseCallback も void func(int event, int x, int y, int flags, void *paramCallback)のこと
  • paramとfuncの最後のパラメータparamCallbackは同じ型であること.
  • paramがfuncにparamCallbackとして渡されるので,それによりどのウィンドウでイベントが起きたか検知できる
  • eventには起きたイベントの種類
  • flagsにはイベントが起きたときの状態フラグがbit和で渡される

サンプルコード

#include <stdio.h>
#include <cv.h>
#include <highgui.h>

// マウスのコールバック関数
void onMouse(int event, int x, int y, int flags, void* param);
// 入力画像
IplImage *image;

int main(int argc, char** argv){
	char inputkey;
	// 画像の読み込み
	image = cvLoadImage(argv[1], -1);
	// ウィンドウの生成
	cvNamedWindow("Input Image", CV_WINDOW_AUTOSIZE);
	// マウスコールバック関数の設定
	cvSetMouseCallback("Input Image", onMouse, "Input Image");
	// 読み込み画像表示
	cvShowImage("Input Image", image);
	// ループ
	while(inputkey	= cvWaitKey(1), inputkey != 27 && inputkey != 'q');
}

// コールバック関数
void onMouse(int event, int x, int y, int flags, void* param){
	// eventに起きたイベントの種類が格納される
	// flagsに共起したイベントが含まれている
	if(event	== CV_EVENT_LBUTTONDOWN && !strcmp(param, "Input Image")){
		printf("x:%03d y:%03d\n", x, y);
	}
}

備考

イベントの種類

  • CV_EVENT_MOUSEMOVE (0):マウスカーソルが動いた
  • CV_EVENT_LBUTTONDOWN (1):左ボタンが押された
  • CV_EVENT_RBUTTONDOWN (2):右ボタンが押された
  • CV_EVENT_MBUTTONDOWN (3):中央ボタンが押された
  • CV_EVENT_LBUTTONUP (4):左ボタンが離された
  • CV_EVENT_RBUTTONUP (5):右ボタンが離された
  • CV_EVENT_MBUTTONUP (6):中央ボタンが離された
  • CV_EVENT_LBUTTONDBLCLK (7):左ボタンがダブルクリックされた
  • CV_EVENT_RBUTTONDBLCLK (8):右ボタンがダブルクリックされた
  • CV_EVENT_MBUTTONDBLCLK (9):中央ボタンがダブルクリックされた

フラグの種類

  • CV_EVENT_FLAG_LBUTTON (1):マウス左ボタンが押されているか
  • CV_EVENT_FLAG_RBUTTON (2):マウス右ボタンが押されているか
  • CV_EVENT_FLAG_MBUTTON (4):マウス中央ボタンが押されているか
  • CV_EVENT_FLAG_CTRLKEY (8):CTRLボタンが押されているか
  • CV_EVENT_FLAG_SHIFTKEY (16):Shiftボタンが押されているか
  • CV_EVENT_FLAG_ALTKEY (32):Altボタンが押されているか

実体ファイル

  • OpenCV1.1以前の場合
    • TBW
  • OpenCV2.2
    • modules/highgui/include/opencv2/highgui/highgui.hpp
    • modules/highgui/src/window.cpp

ジャンル:OpenCV:OpenCV 1.0準拠


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-09-21 (水) 23:52:26 (2255d)