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);
}