#include<opencv2/opencv.hpp> #include<iostream> void onm ouse(int event, int x, int y, int flags, void* param) //鼠标回调函数 { /* Event是整数,表示鼠标事件的类型 X和Y为事件发生时鼠标的坐标,用像素坐标表示 flags表示事件发生时按下鼠标的那个键 param是指向任意对象的指针,作为附件的参数发送给函数 */ cv::Mat* im = reinterpret_cast<cv::Mat*>(param); //im事件发生时鼠标所指的图像指针 switch (event) { case cv::EVENT_LBUTTONDOWN: // 鼠标左键按下 std::cerr << "你按下了鼠标左键x=" << x << ", y=" << y << std::endl << std::endl; break; case cv::EVENT_RBUTTONDOWN: // 鼠标右键按下 std::cerr << "你按下了鼠标右键:x=" << x << ", y=" << y << std::endl << std::endl; break; /* cv::EVENT_MBUTTONDOWN 中键按下 cv::EVENT_LBUTTONUP 左键放开 cv::EVENT_RBUTTONUP 右键放开 cv::EVENT_MBUTTONUP 中键放开 cv::EVENT_LBUTTONDBLCLK 左键双击 cv::EVENT_RBUTTONDBLCLK 右键双击 cv::EVENT_MBUTTONDBLCLK 中键双击 */ } } int main(int argc, char** argv) { cv::Mat image= cv::imread("D:/bb/tu/sansui.jpg"); if (image.empty()) { std::cout << "图像读取失败..." << std::endl; return 0; } cv::namedWindow("Original Image"); cv::imshow("Original Image", image); cv::setMouseCallback("Original Image", onm ouse, reinterpret_cast<void*>(&image));//处理鼠标动作 /* 参数1:窗口的名字 参数2:onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针 参数3:userdate:传给回调函数的参数【鼠标所指的图像】 */ cv::waitKey(0); return 0; }