• HighGUI图形图像界面初步—— 图像的载入、显示与输出


    HighGUI模块为高层GUI图形用户界面模块,包含媒体的输入输出、视频捕捉、图像和视频的编解码、图形交互界面的接口等。

    在本章中,我们将学到:

    • 图像的载入、显示和输出到文件的详细分析
    • 滑动条的创建和使用
    • OpenCV中的鼠标操作

    1、图像的载入与显示概述

      在新版的opencv2中,最简单的图像载入和显示只需两句代码,非常便捷。这两个行代码分别对应两个函数:imread()和imwrite()。

      1.1 图像的载入:imread()函数

      Mat imread(const string& filename, int flags = 1);

      参数说明:

      (1)第一各参数:图片路径+图片名。OpenCV的imread函数支持如下类型的图像载入。

            Windows位图:*.bmp, *.dib

         JPEG文件:*.jpeg, *.jpg, *.jpe

              JPEG2000文件:*.jp2

         PNG图片:*.png

         便携文件格式:*.pbm, *.pgm, *.ppm

         Sun raters光栅文件:*.sr, *.ras

         TIFF文件:*.tiff, *,tif

      (2)第二个参数:载入标识符。它指定了加载图像的颜色类型,默认值为1。这个参数可以在OpenCV中表示图像格式的枚举体中取值。

        

          CV_LOAD_IMAGE_UNCHANGED —— 等价取值-1,这个标识在新版中已经废置,忽略。

          CV_LOAD_IMAGE_GRAYSCALE —— 等价于取值0,始终将图像转换为灰度再返回。

          CV_LOAD_IMAGE_COLOR —— 等价取值1,总是讲图像转换成彩色再返回。

          CV_LOAD_IMAGE_ANYDEPTH —— 等价取值2,如果去这个标识,且载入图像深度为16位或者32位,则返回对应深度图像,否则转为8位图像再返回。

          CV_LOAD_IMAGE_ANYCOLOR -—— 等价取值4。

        对于参数 flags,如果我们不在枚举体中取值,那么可以这样进行:

          flags>0返回三个通道的彩色图像

          flags=0返回灰度图像

          flags<0返回包含Alpha通道的加载图像

      

      1.2 图像的显示:imshow()函数

      void imshow(const string & windowname, InputArray mat);

      参数说明:

        第一个参数:窗口名称

        第二个参数:需要显示的图像,Mat类型。

       如果窗口使用CV_WINDOW_AUTOSIZE标志创建,那么显示图像原始大小。

       否则按照图像的深度进行缩放,具体如下:

        载入图像类型      |        显示大小   

        8-bit unsigned    |    原样输出

        16-bit unsigned     |        使用像素值除以256,也就是值得范围是[0,255x256]映射到[0,255]

        32-bit unsigned  |  同上

        32-bit float point    |       像素要乘以255,也就是范围[0,1]映射到[0,255]

       如果设定了支持OpenGL(WINDOW_OPENGL),那么imshow还支持ogl::Buffer、ogl::Texture2D以及gpu::GpuMat作为输入。

    2、关于InputArray类型

      很多时候,我们遇到函数原型中的InputArray/OutputArray类型,只需要简单地转为Mat类型即可。

    3、创建窗口:namedWindow()函数

      如果只是简单地显示图像,我们可以不用创建窗口,直接在imshow函数中给出窗口名称即可。

      但是我们后续学习到的滑动条的使用,要制定滑动条依附到那个窗口上,这时候就要给出窗口的实例。

      namedWindow()函数原型:

        void nameWindow(const string & winname, int flags=WINDOW_AUTOSIZE);

        参数说明

           第一个参数:窗口名称

        第二个参数:窗口标识符。可以填一下集中取值。

          WINDOW_NORMAL,用户可以改变窗口大小。

          WINDOW_AUTOSIZE,窗口大小会自动调整以适应所显示的图像,用户不能手动修改图像大小。

          WINDOW_OPENGL,设置后窗口会支持OpenGL。

        以上三个标识符,是在OpenCV1中,如果在OpenCV2中,那么需要加前缀CV_:

          CV_WINDOW_NORMAL

          CV_WINDOW_AUTOSIZE

          CV_WINDOW_OPENGL

        

    4、输出图像到文件:imwrite()函数

      bool imwrite(const string& filename, InputAaary img, const vector<int> &params=vector<int>() );

      参数说明

      (1)第一个参数,需要写入的目标文件名,需要带上后缀。

      (2)第二个参数,InputArray类型图像,一般填一个Mat类型图像数据。

      (3)第三个参数,表示为特定格式保存的参数编码,默认不用填。如果填的话,下面需要了解的地方。

        对于JPEG格式图片,这个参数表示从0到100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95.

        对于PNG格式图片,表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0到9,较高的值意味着更小的尺寸和更长的压缩时间,默认为3.

        对于PPM, PGM, 或者PBM格式的图片,表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或者1,默认为1.

        

  • 相关阅读:
    Tomcat应用中post方式传参数长度限制
    关于动态生成data组件
    H5 App开发用WeX5垃圾 试用一周,我果断放弃了wex5
    windowDialog销毁页面的问题
    WeX5之xid相关API
    ADB工具 获取ROOT权限及复制文件方法
    Android中使用am命令实现在命令行启动程序详解
    SQLite加密的方法(c#)
    C# Winform中如何让PictureBox的背景透明
    Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互
  • 原文地址:https://www.cnblogs.com/houjun/p/8511645.html
Copyright © 2020-2023  润新知