opencv模拟button
来源:互联网 发布:kofi2012知乎 编辑:程序博客网 时间:2024/06/16 15:20
简介
在opencv中并没有专门的button控件,一般可以使用trackbar,设置状态为0、1,来模拟控制触发。不过总感觉这方法有点二,因此尝试了下在opencv中模拟键值使用。 同时在实现过程中,使用到了资料:http://www.csdn123.com/html/mycsdn20140110/84/8403a669ceed8e896d5c3ebc45b483b4.html ,非常感谢。
实现流程
具体代码
void ButtonShow(void){int i; for(i=0; i< buttonNum; i++){if(i != 0){L_width = buttonAddr[i-1][2] + 30;}b_seat1=drawButton(img, buttonName[i],Point(L_width, L_height),0);buttonAddr[i] = (int *)malloc(4); buttonAddr[i][0] = b_seat1.x;buttonAddr[i][1] = b_seat1.y;buttonAddr[i][2] = b_seat1.width + b_seat1.x;buttonAddr[i][3] = b_seat1.height+ b_seat1.y;}} void on_mouse( int event, int x, int y, int flags, void* ustc) {int buttonNow = -3;if(event == CV_EVENT_LBUTTONDOWN){tmpAddr[0] = x;tmpAddr[1] = y;tmpAddr[2] = 0;tmpAddr[3] = 0;}else if(event == CV_EVENT_LBUTTONUP){tmpAddr[2] = x;tmpAddr[3] = y;buttonNow = choiceButton(tmpAddr, buttonAddr, buttonNum);on_button(buttonNow);}} int main(int argc,char **argv){img=imread(back_name,1); ButtonShow();imshow(back_show, img);cvSetMouseCallback(back_show, on_mouse, NULL);waitKey();}
主体框架
首先加载一副图片作为背景图,接着将使用ButtonShow将button画在背景图片上,同时将每个button的坐标位置都保存在buttonAddr数组中,接着将画好button之后的背景图片显示出来,最后给该背景图加上鼠标响应和等待用户操作。
img=imread(back_name,1); ButtonShow();imshow(back_show, img);cvSetMouseCallback(back_show, on_mouse, NULL);waitKey();
鼠标响应
将用户鼠标左键按下和抬起的坐标都保存在tmpAddr,接着使用函数choiceButton和on_button进行控件的选择和响应。
void on_mouse( int event, int x, int y, int flags, void* ustc){int buttonNow = -3;if(event == CV_EVENT_LBUTTONDOWN){tmpAddr[0] = x;tmpAddr[1] = y;tmpAddr[2] = 0;tmpAddr[3] = 0;}else if(event == CV_EVENT_LBUTTONUP){tmpAddr[2] = x;tmpAddr[3] = y;buttonNow = choiceButton(tmpAddr, buttonAddr, buttonNum);on_button(buttonNow);}}
控件选择
int choiceButton(int* tmpAddr, int** buttonAddr, int size){int i, tmp; tmp = abs(tmpAddr[0] - tmpAddr[2]) + abs(tmpAddr[1] - tmpAddr[3]);if(tmp > 20){return -2;}for(i=0; i< size; i++){if((buttonAddr[i][0] < tmpAddr[0]) && (buttonAddr[i][2] > tmpAddr[0])){if((buttonAddr[i][1] < tmpAddr[1]) && (buttonAddr[i][3] > tmpAddr[3])){return i;}}}return -1;}
在鼠标左键抬起的时候调用函数:choiceButton。 tmpAddr:鼠标左键按下时候的坐标和鼠标左键抬起时候的坐标。 buttonAddr: 控件的个数和它们的坐标信息。 size:控件的数量。 在choiceButton中,1、判断鼠标按下和抬起的坐标是不是在同一个位置,不是的话就直接返回-2。 2、判断鼠标左键按下的坐标是不是在控件的范围之类,是的话,就直接返回控件编号。 3、如果鼠标左键按下的位置没有在任何一个控件范围内,返回 -1。
控件响应
void on_button(int buttonNow){char str[20];sprintf(str,"%d", buttonNow);Mat img = cv::Mat(300, 300, CV_8UC3, 1);imshow(str, img);}
根据前面控件选择传回来的参数,对应的用该参数作为空白图片的显示窗口名字,并显示出来。
效果演示
对应的效果演示截图如下:
按下控件:cancel,弹出窗口0。 按下控件:add, 弹出窗口1。
0 0
- opencv模拟button
- 模拟Button监听
- IOS Button 模拟点击
- Android 模拟Button 回调
- Button模拟开关按钮
- 模拟调用Button Click事件
- opencv模拟景深效果
- 自定义Button模拟ToggleButton功能,android
- 模拟Radio Button的点击动作
- Android 自定义Button 模拟back事件
- 模拟Listener对button的监听过程
- 方法button.performClick(); 模拟点击的使用
- MSN 界面 模拟 (二)Msn Style Colorful Button
- design principle:模拟 android Button 控件点击事件
- iOS 带下划线 模拟超连接的button
- 通过UIView来模拟 实现 Button的点击效果
- C# 模拟点击button,实现其中的方法
- OpenCV实现运动模糊图像的模拟
- 配置opencv1
- Automate Your Coding Standard
- 再论拷贝构造函数和拷贝赋值运算符
- noj算法题——二分查找
- Beauty Is in Simplicity
- opencv模拟button
- 自动排班系统2.0(基于网络流实现的排班系统,附详细注解)
- SHELL基础二函数和字符
- MD5 SHA
- C Primer Plus 第五版 课后练习
- 【Python-Opencv】KNN手写体字符识别
- VS制作程序安装包
- 大型网站系统架构演变之路
- 机器学习C10笔记: kNN推荐系统