前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >☀️Python+opencv常用函数☀️

☀️Python+opencv常用函数☀️

作者头像
苏州程序大白
发布2022-04-13 17:25:48
8060
发布2022-04-13 17:25:48
举报

☀️Python+opencv常用函数☀️

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函数,否则显示窗内将一闪而过,不会驻留屏幕。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ☀️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函数使用示例
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档