Visual Studio 2013 Express Visual C++( アンマネージドコード ) OpenCV 3.1 |
■261.OpenCV マウスイベント | Prev Top Next | |
|
今回はマウスイベント処理です。
#include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #pragma comment( lib, "opencv_world300d.lib" ) void onMouse(int event, int x, int y, int flags, void* param) { switch (event) { case CV_EVENT_MOUSEMOVE: // マウスが移動した // std::cout << "MOUSEMOVE" << x << ":" << y << std::endl; break; case CV_EVENT_LBUTTONDOWN: // 左ボタンが押された std::cout << "LBUTTONDOWN" << x << ":" << y << std::endl; break; case CV_EVENT_RBUTTONDOWN: // 右ボタンが押された std::cout << "RBUTTONDOWN" << x << ":" << y << std::endl; break; case CV_EVENT_MBUTTONDOWN: // 中ボタンが押された std::cout << "MBUTTONDOWN" << x << ":" << y << std::endl; break; case CV_EVENT_LBUTTONUP: // 左ボタンが離された std::cout << "LBUTTONUP" << x << ":" << y << std::endl; break; case CV_EVENT_RBUTTONUP: // 右ボタンが離された std::cout << "RBUTTONUP" << x << ":" << y << std::endl; break; case CV_EVENT_MBUTTONUP: // 中ボタンが離された std::cout << "MBUTTONUP" << x << ":" << y << std::endl; break; case CV_EVENT_LBUTTONDBLCLK: // 左ボタンがダブルクリックされた std::cout << "LBUTTONDBLCLK" << x << ":" << y << std::endl; break; case CV_EVENT_RBUTTONDBLCLK: // 右ボタンがダブルクリックされた std::cout << "RBUTTONDBLCLK" << x << ":" << y << std::endl; break; case CV_EVENT_MBUTTONDBLCLK: // 中ボタンがダブルクリックされた std::cout << "MBUTTONDBLCLK" << x << ":" << y << std::endl; break; } // 何らかのマウス操作を行われたとき下記の状態であればイベントが発生する switch (flags) { case CV_EVENT_FLAG_LBUTTON: // 左ボタンが押されている std::cout << "LBUTTON" << x << ":" << y << std::endl; break; case CV_EVENT_FLAG_RBUTTON: // 右ボタンが押されている std::cout << "RBUTTON" << x << ":" << y << std::endl; break; case CV_EVENT_FLAG_MBUTTON: // 中ボタンが押されている std::cout << "MBUTTON" << x << ":" << y << std::endl; break; case CV_EVENT_FLAG_CTRLKEY: // Ctrl キーが押されている std::cout << "CTRLKEY" << x << ":" << y << std::endl; break; case CV_EVENT_FLAG_SHIFTKEY: // Shift キーが押されている std::cout << "SHIFTKEY" << x << ":" << y << std::endl; break; case CV_EVENT_FLAG_ALTKEY: // Alt キーが押されている std::cout << "ALTKEY" << x << ":" << y << std::endl; break; } } int main(int argc, const char* argv[]) { int hr = -1; try { cv::Mat src; src = cv::imread("D:/TEMP/MaverickProj/Image/OpenCV/23/Texture.png", cv::IMREAD_COLOR); // 元画像のウィンドウ作成 cv::namedWindow("Source", 1); // マウスイベント cv::setMouseCallback("Source", onMouse, nullptr); // ウィンドウ表示 imshow("Source", src); cv::waitKey(0); hr = 0; } catch (cv::Exception ex) { std::cout << ex.err << std::endl; } // ウィンドウの破棄 cv::destroyAllWindows(); return hr; }