☀️Python opencv常用函数☀️
- 目录
- 1、前言
- 2、waitKey函数原型
- 2.1、waitKey函数详解
- 2.2、waitKey函数用法
- 3、imread函数
- 3.1、imread函数作用
- 3.2、imread函数原型
- 3.3、imread c 原型
- 3.4、imread python原型
- 3.5、imread函数使用示例
- 4、imshow函数
- 4.1、imshow函数功能
- 4.2、imshow函数原型
- 4.3、imshow函数c 原型
- 4.4、imshow函数python原型
- 4.5、imshow函数使用示例
1、前言
waitKey函数既是opencv里常用又非常基础的函数,是刚开始学习opencv,还是使用opencv进行开发调试,都是waitKey函数的例子。然而最基础的东西可能容易看出忽略,在此可以忽略可以很好地了解这个基础又常用的waitKey函数。
2、waitKey函数原型
翻阅opencv的官方文档,可以得到该函数的原型为
代码语言:javascript复制int cv::waitKey ( int delay = 0 )
Python:
retval = cv.waitKey( [, delay] )
从函数的可以大致了解该函数的以下信息
- waitKey函数属于cv内部空间。
- 一个int类型的参数,默认值为0,根据延迟的名称可以确定参数值是一个值。
- 函数返回值为int类型。
以上就是通过函数原型可以解读到的信息了,关于waitKey函数的更多,往下继续了解。
2.1、waitKey函数详解
waitKey函数参考文献的opencv官方文档,文档对waitKey函数的解释
代码语言:javascript复制1、等待一个按键。可以理解为此函数的功能是等待一个按键按下。
代码语言:javascript复制2、函数 Waitkey 在参数delay为正整数n时,延迟n毫秒,或者无限等待按键事件 delay≤0时 。
由于操作系统在切换线程之间需要时间, 该函数不会等待完全延迟n ms, 它将等待至少延迟n ms, 这具体取决于当时计算机上运行的其他时间。
如果在指定的时间之内没有按下键, 则返回按下的键或-1 的ascii码。函数的返回值是键盘按键键值的ascii码。
代码语言:javascript复制3、此函数是 HighGUI 中唯一可以提取和处理事件的方法, 因此需要定期调用它进行正常的事件处理, 除非在处理事件处理的环境中使用 HighGUI。
代码语言:javascript复制4、该函数仅在至少创建了一个 HighGUI 窗口并且该窗口处于活动状态时才有效。如果有多个 HighGUI 窗口, 则其中任何一个都可以处于活动状态。
代码语言:javascript复制5、延迟延迟以毫秒为单位。0是表示 "永远" 的特殊值。即参数值为0时,waitKey函数等待的时间是无限长。
通过以上对官方文档的学习,对waitKey的认识可以归为:waitKey函数是一个等待键盘事件的函数,参数值delay<=0时等待时间无限长,delay为正整数n时至少等待n毫秒的时间才结束。在等待的期间按下任意按键时函数结束,返回按键的键值(ascii码),等待时间结束仍未按下按键则返回-1。该函数用在处理HighGUI窗口程序,最常见的便是与显示图像窗口imshow函数搭配使用。
2.2、waitKey函数用法
waitKey函数非常基础以及常用,以下是常见的一些用法
代码语言:javascript复制cv::imshow("windowname", image);
cv::waitKey(0);//任意按键按下,图片显示结束,返回按键键值
代码语言:javascript复制cv::imshow("windowname", image);
cv::waitKey(10);//等待至少10ms图片显示才结束,期间按下任意键图片显示结束,返回按键键值
代码语言:javascript复制VideoCapture cap("video.mp4");
if(!cap.isOpened())
{
return -1;
}
Mat frame;
while(true)
{
cap>>frame;
if(frame.empty()) break;
imshow("windowname",frame);
if(waitKey(30) >=0) //延时30ms,以正常的速率播放视频,播放期间按下任意按键则退出视频播放,并返回键值
break;
}
代码语言:javascript复制ideoCapture cap("video.mp4");
if(!cap.isOpened())
{
return -1;
}
Mat frame;
while(true)
{
cap>>frame;
if(frame.empty()) break;
imshow("windowname",frame);
if(waitKey(30) == 27) //延时30ms,以正常的速率播放视频,播放期间按下esc按键则退出视频播放,并返回键值
break;
}
waitKey函数
是非常简单而且常见的,开始入门的时候需要掌握好它,开发调试的时候waitKey函数
同样是一个好帮手。
3、imread函数
3.1、imread函数作用
imread函数
的作用非常简单,从函数的名称也可以看出来,imread
为image read
的缩写,即图像读取的意思,。那么imread函数的作用就很明显了,负责读取图像。其实学过matlab的同学就会知道,matlab中也有一个读取图像的函数也命名为imread,这是opencv借鉴了matlab而命名的,因为在opencv3.x
时代,加载图像的函数并不叫imread
,二是由cvLoadImage函数
负责。
3.2、imread函数原型
话不多说,了解imread函数的原型,从opencv的最新document可以查阅到imread原型为
3.3、imread c 原型
代码语言:javascript复制#include <opencv2/imgcodecs.hpp>
Mat cv::imread ( const String & filename,
int flags = IMREAD_COLOR
)
3.4、imread python原型
代码语言:javascript复制Python:
retval = cv.imread( filename[, flags] )
可以看到,imread函数原型非常简单,可以总结为三点
返回值,Mat 类型, 即返回读取的图像,读取图像失败时返回一个空的矩阵对象(Mat::data == NULL) 参数1 filename, 读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀) 参数2 flags, 一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关。
imread函数支持读取的图像格式有
代码语言:javascript复制Windows bitmaps - .bmp, .dib alwayssupported
JPEG files - .jpeg, .jpg, *.jpe seetheNotesection
JPEG 2000 files - *.jp2 seetheNotesection
Portable Network Graphics - *.png seetheNotesection
WebP - *.webp seetheNotesection
Portable image format - .pbm, .pgm, .ppm .pxm, *.pnm alwayssupported
PFM files - *.pfm seetheNotesection
Sun rasters - .sr, .ras alwayssupported
TIFF files - .tiff, .tif seetheNotesection
OpenEXR Image files - *.exr seetheNotesection
Radiance HDR - .hdr, .pic alwayssupported
Raster and Vector geospatial data supported by GDAL seetheNotesection
Note
flags值被定义在enum cv::ImreadModes枚举类里面
c 定义 | python定义 | 说明 |
---|---|---|
IMREAD_UNCHANGED | Python: cv.IMREAD_UNCHANGED | 如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪) |
IMREAD_GRAYSCALE | Python: cv.IMREAD_GRAYSCALE | 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。 |
IMREAD_COLOR | Python: cv.IMREAD_COLOR | 如果设置,请始终将图像转换为3通道BGR彩色图像。 |
IMREAD_ANYDEPTH | Python: cv.IMREAD_ANYDEPTH | 如果设置,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 |
IMREAD_ANYCOLOR | Python: cv.IMREAD_ANYCOLOR | 如果设置,则以任何可能的颜色格式读取图像。 |
IMREAD_LOAD_GDAL | Python: cv.IMREAD_LOAD_GDAL | 如果设置,使用gdal驱动程序加载图像 |
IMREAD_REDUCED_GRAYSCALE_2 | Python: cv.IMREAD_REDUCED_GRAYSCALE_2 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/2。 |
IMREAD_REDUCED_COLOR_2 | Python: cv.IMREAD_REDUCED_COLOR_2 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。 |
IMREAD_REDUCED_GRAYSCALE_4 | Python: cv.IMREAD_REDUCED_GRAYSCALE_4 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/4 |
IMREAD_REDUCED_COLOR_4 | Python: cv.IMREAD_REDUCED_COLOR_4 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/4 |
IMREAD_REDUCED_GRAYSCALE_8 | Python: cv.IMREAD_REDUCED_GRAYSCALE_8 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/8。 |
IMREAD_REDUCED_COLOR_8 | Python: cv.IMREAD_REDUCED_COLOR_8 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/8。 |
IMREAD_IGNORE_ORIENTATION | Python: cv.IMREAD_IGNORE_ORIENTATION | 如果设置,请不要根据EXIF的方向标志旋转图像。 |
3.5、imread函数使用示例
代码语言:javascript复制 if (image.data != NULL)
{
//show the image
imshow("clock", image);
waitKey(0);
}
else
{
cout << "can't openc the file!" << endl;
getchar();
}
return 0;
}
opencv的官方文档document其实是一份非常好的资料,关于opencv的几乎都可以在上面查阅得到,不过缺点就是文档为全英文的,这个需要自己多练习练习 一下。
4、imshow函数
4.1、imshow函数功能
imshow的函数功能也非常简单,名字可以看出来也很简单,图像显示的缩写也可以。为imshow,这也是opencv显示的例子了matlab的变种,在早期opencv1.x的版本中,负责图像的功能的函数为cvShowImage。
4.2、imshow函数原型
下面分别为imshow函数的c 与python原型。
4.3、imshow函数c 原型
代码语言:javascript复制#include <opencv2/highgui.hpp>//所在头文件
void cv::imshow ( const String & winname,
InputArray mat
)
4.4、imshow函数python原型
代码语言:javascript复制Python:
None = cv.imshow( winname, mat )
函数的简单很简单,可以很容易理解
- 没有返回值
- 参数1,显示的窗口名,可以使用cv::namedWindow函数创建窗口,如不创建,imshow函数将自动创建。
- 需要显示的图片
4.5、imshow函数使用示例
代码语言:javascript复制#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
//read the image
Mat image = imread("./clock.jpg");
if (image.data != NULL)
{
//show the image
imshow("clock", image);
// imshow之后必须有waitKey函数,否则显示窗内将一闪而过,不会驻留屏幕
waitKey(0);
}
else
{
cout << "can't openc the file!" << endl;
getchar();
}
return 0;
}
使用方法也非常简单,需要注意的一点就是,显示之后必须有waitKey函数,否则显示窗内将一闪而过,不会驻留屏幕。