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.

    

HighGUI图形图像界面初步—— 图像的载入、显示与输出的更多相关文章

  1. HighGUI图形图像界面初步——滑动条的创建和使用

    ---恢复内容开始--- 滑动条是OpenCV动态调节参数特别好用的一种工具,它依附于窗口而存在.由于OpenCV没有实现按钮功能,所以很多时候,我们可以用仅含0-1的滑动条来实现按钮的按下于弹起效果 ...

  2. HighGUI图形图像界面初步——鼠标操作

    OpenCV中的鼠标操作和滑动条的消息映射方式很类似,都是通过一个中介函数配合一个回调函数来实现的,创建和指定滑动条回调函数为createTrackbar, 而指定鼠标操作消息回调函数的函数为setM ...

  3. opencv 1 HighGUI图形用户界面初步

    1图像载入 显示和输出到文件 Opencv的命名空间 Mat类 图像的载入:imread()函数 图片的显示:imshow()函数 创建窗口:namedWindow()函数 输出图像到文件:imwri ...

  4. opencv学习HighGUI图形用户界面初步【1】

    HighGUI是图形用户界面模块.包括:1.输入与输出:2.视频捕捉:3.图形和视频的解码编码:4.图形交界面与接口. 由于opencv.hpp包含了core.objdetect.ingproc.ph ...

  5. 学习 opencv---(2) 图像的载入,显示和输出

    了解过之前老版本OpenCV的童鞋们都应该清楚,对于OpenCV1.0时代的基于 C 语言接口而建的图像存储格式IplImage*,如果在退出前忘记release掉的话,就会照成内存泄露.而且用起来超 ...

  6. 以小时候玩的贪吃蛇为例,对于Java图像界面的学习感悟

    简介 正文 01.JFrame是啥? 02.JPanel 03. KeyListener 04.Runnable 05.游戏Running 06.游戏初始类编写 07.main 简介: 一直以来用代码 ...

  7. 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨)  ...

  8. xp主机用VMware9和10安装Ubuntu12.04后无法进入图像界面

    xp主机用VMware9和10安装Ubuntu12.04后无法进入图像界面 备注:虚拟机安装Ubuntu12.04 64位版本 刚开始我用VMware-workstation-full-8.0.3来安 ...

  9. OpenCV——图像的载入、显示、输出到文件和滑动条、鼠标操作

    图像的载入.显示.输出到文件和滑动条 滑动条 示例: 鼠标操作

随机推荐

  1. 【转】EI收录的中国期刊

    ISSN     期刊名  0567-7718 Acta Mechanica Sinica  1006-7191 Acta Metallurgica Sinica (English Letters)  ...

  2. 【转】shell字符串截取

    shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...

  3. java基础(一) 深入解析基本类型

    .   浮点数使用 IEEE(电气和电子工程师协会)格式. 浮点数类型使用 符号位.指数.有效位数(尾数)来表示.要注意一下,尾数的最高 在java中,float 和 double 的结构如下: 类 ...

  4. 前端开发-DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  5. vue打包后不使用服务器直接访问方法

    根据官网打包执行npm run build 后dist文件夹打开的index.html 是空白 需要开启http服务器才能访问,以下是解决办法 1.找到config文件夹下的index文件 修改成 2 ...

  6. Keil中搭建自动化单元测试框架Unity

    前言: 虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动 ...

  7. BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]

    2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...

  8. BZOJ 4516: [Sdoi2016]生成魔咒 [后缀自动机]

    4516: [Sdoi2016]生成魔咒 题意:询问一个字符串每个前缀有多少不同的子串 做了一下SDOI2016R1D2,题好水啊随便AK 强行开map上SAM 每个状态的贡献就是\(Max(s)-M ...

  9. JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】

    1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement对象编译SQL语句时, ...

  10. WinSock IOCP 模型总结(附一个带缓存池的IOCP类)

    前言 本文配套代码:https://github.com/TTGuoying/IOCPServer 由于篇幅原因,本文假设你已经熟悉了利用Socket进行TCP/IP编程的基本原理,并且也熟练的掌握了 ...