【OpenCV】OpenCV输入处理(鼠标事件_键盘事件_滑块事件)
2016-03-29 16:08
525 查看
1、输入处理
(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);
(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);
(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; }
相关文章推荐
- 搭建nginx反向代理用做内网域名转发
- shell常用命令总结
- Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
- linux lsof 用法简介
- 使用flask开发网站后端
- nginx配置python的cgi
- OpenStack入门 之 初步了解
- Linux 性能测试工具
- linux学习基础之1.0---shell的常见指令
- web网站的压力测试
- Jenkins+SVN+Maven+Shell 实现项目一键发布
- Linux系统下取IP地址的几种方法
- netlink---Linux下基于socket的内核和上层通信机制 (转)
- liunx下svn自动更新
- openwrt下关于snmpd的一些信息
- Nginx-虚拟主机
- xhost命令介绍
- opengl之数据类型
- OpenGL与OpenCL是何关系?
- E45: 'readonly' option is set (add ! to override)错误解决