初识Opencv4.X----窗口交互操作

//窗口交互操作
#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);
	}
	
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46146657/article/details/120254989