您的位置:首页 > 运维架构

【OpenCV】OpenCV输入处理(鼠标事件_键盘事件_滑块事件)

2016-03-29 16:08 525 查看
1、输入处理

(1) 处理鼠标事件:

定义一个鼠标处理程序:

void mouseHandler(int event, int x, int y, int flags, void* param)
{
switch(event)
{
case CV_EVENT_LBUTTONDOWN:
if(flags & CV_EVENT_FLAG_CTRLKEY)
printf("Left button down with CTRL pressed\n");
break;
case CV_EVENT_LBUTTONUP:
printf("Left button up\n");
break;
}
}


x,y: 相对于左上角的像素坐标

event: CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN,

CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP,

CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK,

CV_EVENT_MOUSEMOVE:

flags: CV_EVENT_FLAG_CTRLKEY, CV_EVENT_FLAG_SHIFTKEY, CV_EVENT_FLAG_ALTKEY,

CV_EVENT_FLAG_LBUTTON, CV_EVENT_FLAG_RBUTTON, CV_EVENT_FLAG_MBUTTON

注册该事件处理程序:

mouseParam=5;

cvSetMouseCallback("win1",mouseHandler,&mouseParam);

(2) 处理键盘事件:

实际上对于键盘输入并没有专门的事件处理程序.

按一定间隔检测键盘输入(适用于循环体中) :

int key;

key=cvWaitKey(10); // wait 10ms for input

中止程序等待键盘输入:

int key;

key=cvWaitKey(0); // wait indefinitely for input

键盘输入的循环处理程序:

while(1){

key=cvWaitKey(10);

if(key==27) break;

switch(key){

case 'h':

...

break;

case 'i':

...

break;

}

}

(3) 处理滑动条事件:

定义一个滑动条处理程序:

void trackbarHandler(int pos)

{

printf("Trackbar position: %d\n",pos);

}

注册该事件处理程序:

int trackbarVal=25;

int maxVal=100;

cvCreateTrackbar("bar1", "win1", &trackbarVal ,maxVal , trackbarHandler);

获取当前的滑动条位置:

int pos = cvGetTrackbarPos("bar1","win1");

设置滑动条位置:

cvSetTrackbarPos("bar1", "win1", 25);

#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

#define NAME "TrackerDemo"

Mat img1;
Mat img2;
Mat dstImg;

const int nMaxSlider = 100;
int nAlphaSlider;

double dAlphaVaule;
double dBetaValue;

void duan_TrackBar(int , void*)
{
dAlphaVaule = (double) nAlphaSlider / nMaxSlider;
dBetaValue = 1.0 - dAlphaVaule;

addWeighted(img1, dAlphaVaule, img2, dBetaValue, 0, dstImg);
imshow(NAME, dstImg);
}

int main()
{
img1 = imread("11.jpg");
if (!img1.data)
{
printf("Read image 1 ERROR!\n");
}
img2 = imread("22.jpg");
if (!img2.data)
{
printf("Read image 2 ERROR!\n");
}

nAlphaSlider = 70;

namedWindow(NAME,1);

char TrackBarName[50];
sprintf(TrackBarName, "TouMingZhi %d ",  nAlphaSlider);

createTrackbar(TrackBarName, NAME, &nAlphaSlider, nMaxSlider, duan_TrackBar);

duan_TrackBar(nAlphaSlider, 0);

waitKey(0);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: