OpenCV简单应用(四、waitKey和waitKeyEx)

1.waitKey是OpenCV中很常用的一个函数,原型为:
waitKey(delay)
delay为延时时间,也可以看做间隔时间,单位为毫秒,0表示永远等待。其返回值为ASCII键值,没有任何按键时返回值为-1。特别注意的是,运行本函数,需要至少有一个HighGUI(图形界面)。示例如下:

import cv2
cv2.namedWindow('TEST')
while True:
  key = cv2.waitKey(1)
  if(key>=0):
     print(key)

namedWindow在这里作为一个HighGUI,是不能缺少的,本程序执行时,需要把鼠标移到TEST窗体处,然后再按键,在终端print打印ASCII值。对应的ASCII表如下:

2.此外,还有另外一个函数waitKeyEx,用法类似,除了上述的ASCII之外,还支持虚拟键值(Virtual-Key Codes)。在Python环境下,利用上面的参考程序,把waitKey换成waitKeyEx,测得部分键值如下:

PgUp 2162688
PgDn 2228224
Home 2359296
End 2293760
Ins 2949120
Delete 3014656

除此之外,一些全角字符也会产生键值,感兴趣的话可以尝试一下。

3.ord('字符串')可以返回某个按键的ASCII值,因此编程时为了避免查找ASCII码表的麻烦,可以采用对键值赋值的方式,参考以下示例代码,当按下q键(小写)时退出,其他按键打印键值:

import cv2
cv2.namedWindow('TEST')
while True:
  key = cv2.waitKeyEx(1)
  if key==ord('q'):
     break
  elif key>=0:
    print(key)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. imshow函数:用于在窗口中显示图像,其函数原型为: `void imshow(const string& winname, InputArray mat);` 参数 winname 表示窗口名称,mat 表示要显示的图像。示例代码如下: ```c++ #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { Mat img = imread("lena.jpg"); imshow("lena", img); waitKey(0); return 0; } ``` 2. waitKey函数:用于等待键盘输入,其函数原型为: `int waitKey(int delay = 0);` 参数 delay 表示等待时间(毫秒),如果 delay 为 0,则表示一直等待键盘输入。示例代码如上。 3. erode函数:用于腐蚀图像,其函数原型为: `void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );` 参数 src 表示输入图像,dst 表示输出图像,kernel 表示腐蚀的核,anchor 表示核的锚点,iterations 表示腐蚀次数,borderType 表示边界类型,borderValue 表示边界值。示例代码如下: ```c++ #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { Mat img = imread("lena.jpg"); Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); Mat dst; erode(img, dst, kernel); imshow("erode", dst); waitKey(0); return 0; } ``` 4. blur函数:用于平滑图像,其函数原型为: `void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT );` 参数 src 表示输入图像,dst 表示输出图像,ksize 表示平滑核的大小,anchor 表示核的锚点,borderType 表示边界类型。示例代码如下: ```c++ #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { Mat img = imread("lena.jpg"); Mat dst; blur(img, dst, Size(7, 7)); imshow("blur", dst); waitKey(0); return 0; } ``` 5. canny函数:用于边缘检测,其函数原型为: `void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false );` 参数 image 表示输入图像,edges 表示输出的边缘图像,threshold1 和 threshold2 表示边缘检测的两个阈值,apertureSize 表示 Sobel 滤波器的大小,L2gradient 表示是否使用 L2 范数计算梯度。示例代码如下: ```c++ #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { Mat img = imread("lena.jpg", IMREAD_GRAYSCALE); Mat edges; Canny(img, edges, 50, 150); imshow("canny", edges); waitKey(0); return 0; } ``` 6. cvtColor函数:用于颜色空间转换,其函数原型为: `void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );` 参数 src 表示输入图像,dst 表示输出图像,code 表示转换的类型,dstCn 表示输出图像的通道数。示例代码如下: ```c++ #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { Mat img = imread("lena.jpg"); Mat hsv_img; cvtColor(img, hsv_img, COLOR_BGR2HSV); imshow("hsv", hsv_img); waitKey(0); return 0; } ``` 以上就是 OpenCV 中 inshow、waitkey、erode、blur、canny、cvtColor 函数的用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SDAU2005

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值