//窗口交互操作
#include <stdio.h>
#include <iostream>
#include <string>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
void callback_width_brush(int,void*);
void callback_mouse(int event, int x, int y, int flags, void*);
//全局变量
int value = 2;
Mat img;
Point pre_point;
int main()
{
/*
当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。
但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。
这个被传入的、后又被调用的函数就称为回调函数(callback function)。
链接:https://www.zhihu.com/question/19801131/answer/27459821
*/
//Function:通过滑动条实现画笔的粗细,鼠标左键拖拽可以实现画笔功能
img = Mat::zeros(Size(500, 500), CV_8UC1);
imshow("交互窗口", img);
createTrackbar("画笔粗细", "交互窗口", &value, 20, callback_width_brush, 0);
setMouseCallback("交互窗口", callback_mouse, 0);
waitKey(0);
return 0;
}
static void callback_width_brush(int, void*)
{
imshow("交互窗口", img);
}
void callback_mouse(int event, int x, int y, int flags, void*)
{
if (event == EVENT_LBUTTONDOWN)//鼠标按下
{
pre_point = Point(x, y);
}
if ((event == EVENT_MOUSEMOVE) && (flags == EVENT_FLAG_LBUTTON))//鼠标移动并拖拽
{
//通过画直线来显示鼠标轨迹
line(img, pre_point, Point(x, y), Scalar(255), value > 2 ? value : 2, 5, 0);//value的值必须大于或等于2
pre_point = Point(x, y);
imshow("交互窗口", img);
}
}
初识Opencv4.X----窗口交互操作
猜你喜欢
转载自blog.csdn.net/qq_46146657/article/details/120254989
今日推荐
周排行