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

来源:互联网 发布:算法导论第三版.pdf 编辑:程序博客网 时间:2024/06/02 06:52
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;}


0 0
原创粉丝点击