关于waitKey()函数的用法
来源:互联网 发布:mac蓝光刻录软件 编辑:程序博客网 时间:2024/06/05 17:06
首先分享一段代码,和在Linux下的运行方法:
//#include <opencv2/calib3d/calib3d.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>//#include <opencv2/features2d/features2d.hpp>#include <iostream>using namespace std;using namespace cv;cv::Mat src,dst;cv::Mat map_x,map_y;int ind =0;void update_map();int main(){ src=cv::imread("test.jpg",1); dst.create(src.size(),src.type()); map_x.create(src.size(),CV_32FC1); map_y.create(src.size(),CV_32FC1); while(1) { // int c=waitKey(1000); // if((char)(c)==27) // { // break; // } if((waitKey(1000)&255)==27)//这种写法和上面的注释掉的写法等效 { break; } update_map(); //cout<<"ind:"<<ind<<endl; //start remap() remap(src,dst,map_y,map_x,CV_INTER_LINEAR,BORDER_CONSTANT); imshow("remap_window",dst); imshow("before_remap_window",src); //waitKey(1000); } return 0;}void update_map(){ ind=ind%4; cout<<"ind:"<<ind<<endl; for(int i=0;i<src.rows;i++) { for(int j=0;j<src.cols;j++) { switch(ind) { case 0: if(j>src.cols*0.25&&j<src.cols*0.75&&i>src.rows*0.25&&i<src.rows*0.75) { map_x.at<float>(i,j)=2*(i-src.rows*0.25)+0.5; map_y.at<float>(i,j)=2*(j-src.cols*0.25)+0.5; } else { map_x.at<float>(i,j)=0; map_y.at<float>(i,j)=0; } break; case 1://左右对调 map_x.at<float>(i,j)=i; map_y.at<float>(i,j)=src.cols-j; break; case 2: map_x.at<float>(i,j)=src.rows-i; map_y.at<float>(i,j)=j; break; case 3: map_x.at<float>(i,j)=src.rows-i; map_y.at<float>(i,j)=src.cols-j; break; } } } ind++;}
这个代码实现的功能是:在一个窗口实现4种remap状态的切换,间隔时间是1S,当遇到ESC按键按下的时候,退出。
这里我用waitKey()函数遇到了一些坑,首先我开始写的是
if(waitKey(1000)==27){ break;}
ESC按键无法起到它该有的作用,于是就查了下waitKey()到底怎么用;发现
函数原型为:int waitKey(int delay=0):Parameters: delay – Delay in milliseconds. 0 is the special value that means “forever”.
所以当里面参数为0 的时候,这个函数一直会卡在这里,直到检测有按键按下,才会执行后面的语句;也就是 如果x=0,那么无限等待下去,直到有按键按下
当里面的参数不为0 的时候,比如为1000,就是延时1000ms,而且返回的是按键的ASCII值。也就是等待1000 ms,如果在此期间有按键按下,则立即结束并返回按下按键的ASCII值,否则返回-1;
这下应该大致明白怎么用这个函数了吧。
下面说说Ubuntu怎么运行这个代码,我是有一个makefile文件;
里面的代码为:
LIB:= -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_legacy -lopencv_ -lstdc++ CXX:=g++edit : remap.cpp $(CXX) -o edit remap.cpp $(LIB)(这上面必须有一个tab的间隔)
然后在终端进入这个代码所在的文件夹。输入
make edit./edit
讲完了!!祝顺利!!
0 0
- 关于waitKey()函数的用法
- Waitkey函数的用法
- waitKey() 函数的作用
- waitKey() 函数的作用
- OpenCV中waitKey的用法
- 关于waitKey()函数按键无反应情况
- 【OpenCV】关于 waitKey()的使用方法
- MFC 等待函数 WaitKey
- Opencv--waitKey()函数详解
- OpenCV自学笔记15. waitKey() 函数的作用
- getchar函数和waitKey函数
- OpenCV的waitkey不起作用
- opencv中waitkey函数机制
- openCV中waitKey函数介绍
- openCV中waitKey函数介绍
- openCV之waitKey函数简介
- openCV中waitKey函数介绍
- openCV中waitKey函数介绍
- Q&A——资源加载/卸载
- Java Web项目开发流程
- T9搜索联系人
- 网络框架的使用
- requestLayout() improperly called by…view.NoScrollGridView during layout: running second layout pass
- 关于waitKey()函数的用法
- 写在所有最前边的话
- ROS Robotics Projects学习资料汇总笔记
- stm32 ADC理解
- Servlet实现页面跳转
- 【bzoj2329】[HNOI2011]括号修复
- 【IPTV】SDN的概念和价值
- 静态代码分析工具清单:开源篇(各语言)
- IFE Vue动态数据绑定