1. 程式人生 > >【OpenCV】OpenCV輸入處理(滑鼠事件_鍵盤事件_滑塊事件)

【OpenCV】OpenCV輸入處理(滑鼠事件_鍵盤事件_滑塊事件)

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;
}