首先分享一段代码,和在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

讲完了!!祝顺利!!

关于waitKey()函数的用法相关推荐

  1. opencv python 中cv2.putText()函数的用法

    opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...

  2. c++ opencv函数putText用法详解

    c++ opencv函数putText用法详解 #include <stdio.h> #include <iostream> #include <opencv2/open ...

  3. python waitkey(0)_opencv学习之等待按键事件-waitKey函数

    文章来源: 序 waitKey函数属于opencv函数里既常用又非常基础的函数,无论是刚开始学习opencv,还是使用opencv进行开发调试,都可以看到waitKey函数的身影.然而最基础的东西可能 ...

  4. opencv——waitKey函数

    查看全文 http://www.taodudu.cc/news/show-3640478.html 相关文章: python waitkey(0)_opencv学习之等待按键事件-waitKey函数 ...

  5. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  6. Python assert断言函数及用法

    Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...

  7. python中的counter()、elements()、most_common()和subtract()函数的用法

    python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...

  8. Java正则表达式--Matcher.group函数的用法

    https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...

  9. MapInfo中常用查询函数及用法

    MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...

最新文章

  1. 《网管员必读》学习笔记之DNS服务器的安装与配置
  2. 用GAN还原语义标注图!还能手动改细节(附论文、代码)
  3. 【 FPGA 】设置输出延迟(Output Delay)
  4. html中如何把两行合并单元格,怎么把Excel单元格中多行文字合并为一行(2)
  5. JAVA入门级教学之(数据类型)
  6. C语言文件打开方式及说明
  7. 电商app中的商品列表UX框架要如何设计?
  8. 在线等:“实习拿到两个不太好的 offer,去腾讯还是去阿里?”
  9. mysql 左表为null_sql left join count 左表为空表的时候出现空行
  10. 实时查询系统架构:spark流式处理+HBase+solr/ES查询
  11. Qt中connect的几种写法与遍历ComBox的值
  12. Php区分自然量跟aso量,ASO优化——判断下载量与评论的比例关系
  13. 完美显示html的版权符号
  14. 2016年民营企业500强榜单(全国工商联发布)
  15. cs1.5最新服务器地址,CS1.5服务器连接常见问题解决
  16. 如何判断数字里含有某数字
  17. 电缆公司如何面对企业改革?MES系统打造智能工厂
  18. CentOS7安装apache2并启动
  19. java动态代理实现与原理详细分析
  20. 太吾绘卷加载卡54_太吾绘卷存档卡99怎么办?卡存档解决办法介绍

热门文章

  1. 合并单元格后打字换行_excel中合并了单元格以后往里面打字如果打两行字,怎么换行...
  2. WDM波分复用中什么是C波段、L波段?
  3. [蓝屏]driver_unloaded_without_cancelling_pending_operations
  4. 集线器,转发器,网桥,以太网交换机
  5. 动态表头excel导入(java)
  6. error lnk2005解决办法
  7. 前端开发中HTML 规范
  8. c#字符串转为json对象与json转对象
  9. 《ESP32》Adafruit_GFX、u8g2驱动ssd1306
  10. Java高级架构师之路核心知识整理