OpenCV3添加滑动条和鼠标事件到图形界面

鼠标事件和滑动条控制在计算机视觉和OpenCV中非常有用,使用这些控件,用户可以直接与图形界面交互,改变输入图像或者变量的属性值。

 1 /*
 2     In this section, we are going to introduce you to the concepts of adding slider and
 3 mouse events for basic interactions. To understand this correctly, we will create a small
 4 project, where we paint green circles in the image using the mouse events and blur the 
 5 image with slider.
 6 */
 7 #include <opencv2/core.hpp>
 8 #include <opencv2/highgui.hpp>
 9 #include <opencv2/imgproc.hpp>
10 using namespace cv;
11 
12 // Create a variable to save the position value in track
13 int blurAmount = 15;
14 
15 // Trackbar call back function
16 static void onChange(int pos, void* userInput);
17 
18 // Mouse callback
19 static void onMouse(int event, int x, int y, int, void* userInput);
20 
21 int main(int argc, const char** argv)
22 {
23     // Read images
24     Mat boy = imread("../images/eating.jpg");
25 
26     // Create windows
27     namedWindow("Boy");
28 
29     // Create a trackbar
30     createTrackbar("Boy", "Boy", &blurAmount, 30, onChange, &boy);
31 
32     setMouseCallback("Boy", onMouse, &boy);
33 
34     // Call to onChange to init
35     onChange(blurAmount, &boy);
36 
37     // wait app for a key to exit
38     waitKey(0);
39 
40     // Destroy the windows
41     destroyWindow("Boy");
42 
43     return 0;
44 }
45 
46 // Trackbar call back function
47 static void onChange(int pos, void* userInput)
48 {
49     if (pos <= 0) return;
50     // Aux variable for result
51     Mat imgBlur;
52 
53     // Get the pointer input image
54     Mat* image = (Mat*)userInput;
55 
56     // Apply a blur filter
57     blur(*image, imgBlur, Size(pos, pos));
58 
59     // Show the result
60     imshow("Boy", imgBlur);
61 }
62 
63 // Mouse callback
64 static void onMouse(int event, int x, int y, int, void* userInput)
65 {
66     if (event != EVENT_LBUTTONDOWN) return;
67 
68     // Get the pointer input image
69     Mat *image = (Mat*)userInput;
70 
71     // Draw circle
72     circle(*image, Point(x, y), 10, Scalar(0, 255, 0), 3);
73 
74     // Call onChange to get blurred image
75     onChange(blurAmount, image);
76 }

程序运行效果如下:

posted @ 2016-05-19 21:50  XiaoManon  阅读(1939)  评论(0编辑  收藏  举报