鼠标事件和滑动条控制在计算机视觉和OpenCV中非常有用,使用这些控件,用户可以直接与图形界面交互,改变输入图像或者变量的属性值。
/*
In this section, we are going to introduce you to the concepts of adding slider and
mouse events for basic interactions. To understand this correctly, we will create a small
project, where we paint green circles in the image using the mouse events and blur the
image with slider.
*/
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;
// Create a variable to save the position value in track
int blurAmount = 15;
// Trackbar call back function
static void onChange(int pos, void* userInput);
// Mouse callback
static void onMouse(int event, int x, int y, int, void* userInput);
int main(int argc, const char** argv)
{
// Read images
Mat boy = imread("../images/eating.jpg");
// Create windows
namedWindow("Boy");
// Create a trackbar
createTrackbar("Boy", "Boy", &blurAmount, 30, onChange, &boy);
setMouseCallback("Boy", onMouse, &boy);
// Call to onChange to init
onChange(blurAmount, &boy);
// wait app for a key to exit
waitKey(0);
// Destroy the windows
destroyWindow("Boy");
return 0;
}
// Trackbar call back function
static void onChange(int pos, void* userInput)
{
if (pos <= 0) return;
// Aux variable for result
Mat imgBlur;
// Get the pointer input image
Mat* image = (Mat*)userInput;
// Apply a blur filter
blur(*image, imgBlur, Size(pos, pos));
// Show the result
imshow("Boy", imgBlur);
}
// Mouse callback
static void onMouse(int event, int x, int y, int, void* userInput)
{
if (event != EVENT_LBUTTONDOWN) return;
// Get the pointer input image
Mat *image = (Mat*)userInput;
// Draw circle
circle(*image, Point(x, y), 10, Scalar(0, 255, 0), 3);
// Call onChange to get blurred image
onChange(blurAmount, image);
}
程序运行效果如下:
OpenCV官方教程中文版(For Python) PDF
Ubuntu Linux下安装OpenCV2.4.1所需包
CentOS下OpenCV无法读取视频文件