opencv
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// OpenCV includes
#include "opencv2/core.hpp"
#include "opencv2/imgproc.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(int argc, const char** argv)
{
// 读取图片
Mat lena = imread("D:\\opencvLearn\\Chapter_03/lena.jpg");
//创建窗口
namedWindow("Lena");
//创建滑块 参数说明: 1跟踪条名称 2窗口名称 3整数指针 可选 4滑块上最大的位置 5滑块变化的回调函数 6要发送到回调函数的用户数据
createTrackbar("Lena", "Lena", &blurAmount, 30, onChange, &lena);
//添加鼠标事件
setMouseCallback("Lena", onMouse, &lena);
// 初始化图片
onChange(blurAmount, &lena);
waitKey(0);
// 释放窗口
destroyWindow("Lena");
return 0;
}
//回调函数处理
static void onChange(int pos, void* userInput)
{
if (pos <= 0)
return;
Mat imgBlur;
// 传回的值 转为矩阵
Mat* img = (Mat*)userInput;
//模糊过滤器 Size(pos, pos)说明:该参数是 想要应用的模糊内核大小
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);
}
图形用户界面 鼠标滑块事件