一个回调鼠标函数的例子,基于OpenCV2,比起网上一些基于OpenCV1的例子简单、明了许多。
#include<opencv2\opencv.hpp>
//鼠标回调函数
void my_mouse_callback(int event, int x, int y, int flags, void* param);
//保存绘制所用的点
cv::Point pt;
cv::Point pt1;
//判断是否绘制
bool t = false;
int main(int argc, char *argv[])
{
//原图片
cv::Mat image = cv::imread("0001.jpg");
cv::imshow("原图", image);
//注册鼠标回调函数
cvSetMouseCallback(
"原图",
my_mouse_callback);
//循环
while (1)
{
if (t)
{
//重新读取图片
cv::Mat image = cv::imread("0001.jpg");
//画圆,蓝色
cv::circle(image, pt, 20, cv::Scalar(255, 0, 0));
//画矩形,绿色
cv::rectangle(image, cv::Rect(pt, pt1),
cv::Scalar(0, 255, 0));
imshow("原图", image);
t = false;
}
//按ESC键退出循环
if (cv::waitKey(100) == 27)
break;
}
}
//鼠标回调函数
void my_mouse_callback(int event, int x, int y, int flags, void* param)
{
switch (event)
{
//左键按下
case CV_EVENT_LBUTTONDOWN:
{
t = true;
//保存当前点
pt = cv::Point(x, y);
pt1 = cv::Point(x, y);
break;
}
//左键抬起
case CV_EVENT_LBUTTONUP:
{
t = true;
//保存当前点
pt1 = cv::Point(x, y);
break;
}
}
}