1、输入处理
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);
按一定间隔检测键盘输入(适用于循环体中) :
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;
}
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");
设置滑动条位置:
(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;
}