☀️Python+opencv常用函数☀️

2022-04-13 17:25:48 浏览数 (1)

☀️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函数的作用非常简单,从函数的名称也可以看出来,imreadimage 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&apos;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&apos;t openc the file!" << endl;

        getchar();

    }

    return 0;

}

使用方法也非常简单,需要注意的一点就是,显示之后必须有waitKey函数,否则显示窗内将一闪而过,不会驻留屏幕。

0 人点赞