Opencv C++ 滑动块工具 鼠标点击事件

Opencv C++ 滑动块工具 鼠标点击事件

图片路径:
链接:https://pan.baidu.com/s/1TCdforn5chqDqzexYw8pgA
提取码:7c08

滑动块工具函数在这里插入图片描述

int cv::createTrackbar (
const String & trackbarname, //滑动块名字;
const String & winname, //所挂窗口名字;
int * value, //关联 变量的引用;
int count, //最大值
TrackbarCallback onChange = 0, //回调函数名称;
void * userdata = 0 //用户数据; 这里传递图片数据;
)

鼠标点击事件在这里插入图片描述

void cv::setMouseCallback (
const String & winname, //窗口名字;
MouseCallback onMouse, //回调函数名称;
void * userdata = 0 //用户数据 这里传递图片数据;
)

在这里插入图片描述

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;

int blurAmount = 15;

//滑块变更事件;
static void  onChange(int pos, void* userInput);

//鼠标响应事件;
static void onMouse(int event, int x, int y, int, void* userInput);


int main()
{
	//读取图片;
	Mat lena = imread("../Data/lena.jpg");

	namedWindow("Lena");

	//创建滑块工具 函数;
	createTrackbar("Lena", "Lena", &blurAmount, 30, onChange, &lena);

	//为窗口创建 鼠标响应事件;
	setMouseCallback("Lena", onMouse, &lena);

	//初始化调用 滑块事件;
	onChange(blurAmount, &lena);

	//关闭对话框;
	waitKey(0);
	destroyAllWindows();

	system("pause");
	return 0;
}

//滑块变更事件;
static void onChange(int pos, void* userInput)
{
	if (pos <= 0) return;
	
	Mat imgBlur;

	Mat* img = (Mat*)userInput;

	//执行模糊处理;
	blur(*img, imgBlur, Size(pos, pos));

	//重新显示模糊图片;
	imshow("Lena", imgBlur);
}

//鼠标响应事件;
static void onMouse(int event, int x, int y, int, void* userInput)
{
	//只响应 鼠标左键按下事件;
	if (event != EVENT_LBUTTONDOWN) return;

	Mat* img = (Mat*)userInput;

	//在点击座标 绘制圆形;
	circle(*img, Point(x, y), 10, Scalar(0, 255, 0), 3);

	onChange(blurAmount, img);
		
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章