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.

    

原文地址:https://www.cnblogs.com/houjun/p/8511645.html

时间: 2024-10-02 10:27:15

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

opencv 1 HighGUI图形用户界面初步

1图像载入 显示和输出到文件 Opencv的命名空间 Mat类 图像的载入:imread( )函数 原文地址:https://www.cnblogs.com/xingkongcanghai/p/11155248.html

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

HighGUI是图形用户界面模块.包括:1.输入与输出:2.视频捕捉:3.图形和视频的解码编码:4.图形交界面与接口. 由于opencv.hpp包含了core.objdetect.ingproc.photo.video.featurse2d.calib3d.ml.highgui.contrib等模块.一般开发偷懒时#include <opencv2\opencv.hpp>. 但是提交时还是用具体模块的头文件. 命名空间会让你书写代码简单:using namespace cv,那么可以这样imr

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

了解过之前老版本OpenCV的童鞋们都应该清楚,对于OpenCV1.0时代的基于 C 语言接口而建的图像存储格式IplImage*,如果在退出前忘记release掉的话,就会造成内存泄露.而且用起来超级麻烦,我们往往在debug的时候,很大一部分时间在纠结手动释放内存的问题.虽然对于小型的程序来说手动管理内存不是问题,但一旦我们写的代码变得越来越庞大,我们便会开始越来越多地纠缠于内存管理的问题,而不是着力解决你的开发目标. 这,就有些舍本逐末的感觉了. 而自从OpenCV踏入2.0时代,用Mat

【命令init3/5】centos7切换图像界面和dos界面

centos7切换图像界面和dos界面 在图形界面使用 ctrl+alt+F2切换到dos界面 dos界面ctrl+alt+F2切换回图形界面 在命令上 输入 init 3 命令 切换到命令行(dos)界面 输入 init 5命令 切换到图形界面 如果想系统默认 以某种方式启动 使用systemd创建符号链接指向默认运行级别. 修改方法为: 1.首先删除已经存在的符号链接---------------------------------------------------------------

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

简介: 一直以来用代码来写图形界面是我从来没有做过的事,(-?-;)额,但是已经选择软开这条路,我觉得什么都是要会一点,这样的话也许大概可能多个月后重新写东西能够得心应手很多吧.而且,以后自己要是忘记了,也可以在这里看看,顺便提高高自己文学能力.原谅我敲字比较难看懂,这些当中多多少少是存在自己情感写出来的,看正文好了. Read after me:本文是适合一些刚入门学习图形化界面的博友,当然要多多少少了解java之类的基础知识(类相关知识,泛型集合等),否则看看好了.工程文件将会在最后给出附录

ubuntu设置开机默认进入界面及命令行下开启图像界面

前言 环境:ubuntu12.04 一. ubuntu设置默认开机界面 在网上查看了好几种方法,对于当前环境方便或者有用的方式是对/etc/default/grub文件进行设置. 1.默认开机命令行界面 file: /etc/default/grub文件中 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"替换为GRUB_CMDLINE_LINUX_DEFAULT="text" 更新grub.cfg $sudo update-grub

linux图像界面连接-xdm

有两种方法可以激活 --:修改/etc/gdm/custom.conf文件在[xdmcp]字段增加Enable=true --:通过gdmsetup图形配置工具来实现 1.       在LINUX桌面上选择System->Administration->Login Screen,在窗口中选中Remote标签 2.       点击右下角的“Configure XDMCP…”,进入后选中“Honor indirect requests”,Close窗口. 3.       回到主窗口,再选择S

图像肤色初步检测实现

肤色检测输出结果中有许多瑕疵,待于进一步处理(如:滤波操作.....).在此贴出几种图像肤色检测相关代码,供大家参考. 第一种:RGB color space // skin region location using rgb limitation void ImageSkin::ImageSkinRGB(IplImage* rgb,IplImage* _dst) { assert(rgb->nChannels==3&& _dst->nChannels==3); static

对显微镜图像的初步研究

对显微镜图像的初步研究 完成一个机器视觉的项目,首先需要开发者能够理解图像.剖析出特征.提出初步的思路.对于三幅显微镜图片,原始的要求是能够以75%的成功率识别出三类物体.先看图像 一.图像主观体验 1)从总体颜色上来看,发现三幅图像的主要颜色不统一(图1偏紫,图3偏绿),应该是由切片的不同材质造成的.如果所有的切片都是属于这一色调的,可以首先考虑通过颜色域来强化ROI区域.这一点需要沟通和更多的素材: 2)从图像内容上来看,可以划分为1.背景,2.大块区域,3.小型气泡,4.大型气泡.4个区域