OpenCV HighGUI模块
OpenCV High-level GUI模块
-
waitKey(int delay=0)
参数delay表示延迟的毫秒数,可指定时间结束动作,可返回按下键相应的值;如果在指定时间内未有动作,则返回-1;指定delay=0则表示按下键停止动作
-
SetMouseCallback(const String &winname, MouseCallback onMouse, void *userdata=0)
- winname::窗口的名字
- onMouse: 获取在指定窗口内鼠标动作的发生,监听鼠标的点击,移动,松开,判断鼠标的操作类型,并进行响应的函数处理。
-
createTrackbar(const String &trackbarname, const String &winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0)
-
getTrackbarPos(const String &trackbarname, const String & winname) 返回指定trackbar当前位置的值
-
nameWindow(const String &winname, int flags=WINDOW_AUTOSIZE) 生成一个window,尺寸以及调整大小选项由flags决定
-
setMouseCallback(const String &winname, MouseCallback onMouse, void *userdata=0) 根据获取鼠标回调函数的动作
-
setTrackbarMax(const String &winname, const String &winname, int naxval) 设置window中指定trackbar的最大值
-
setTrackbarPos(const String &trackbarname, const String &winname, int pos) 设置指定trackbar的数值
-
waitKey() 根据键盘的案件,返回相应的ASC码数值
-
onMouse(int event, int x, int y, int flags, void* ustc) 鼠标的回调函数,根据鼠标动作,执行具体操作
截图程序
#include<iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
Mat src,dst;
Mat imageROI;
Point pt1, pt2;
bool bCrop=0;
void on_mouse( int event, int x, int y, int flags, void* ustc)
{
switch(event)
{
case EVENT_LBUTTONDOWN:
pt1=Point(x,y);
pt2=Point(x,y);
bCrop=1;
break;
case EVENT_MOUSEMOVE:
if(bCrop)
{
pt2=Point(x,y);
src.copyTo(dst);
rectangle(dst, pt1, pt2, Scalar(255,255,255), 3);
imshow("IMG", dst);
}
break;
case EVENT_LBUTTONUP:
pt2=Point(x,y);
rectangle(dst, pt1, pt2, Scalar(255,255,255), 3);
bCrop=0;
break;
default: break;
}
}
int main(int agrc, char* argv[]){
src=imread("white.jpg",1);
src.copyTo(dst);
namedWindow("IMG", 0);
imshow("IMG",src);
setMouseCallback( "IMG", on_mouse, NULL);
while(true){
int c = waitKey(0);
if( (c & 255) == 27 )
{
cout << "Exiting ...\n";
break;
}
switch((char)c)
{
case '\r':
{
imageROI = src(Rect(pt1, pt2));
imshow("IMG", imageROI);
break;
}
case 'r':
src.copyTo(dst);
imshow("IMG", src);
break;
default:
{
cout << "Exiting ...\n";
break;
}
}
}
return 0;
}