OpenCV图像的加载、显示

Mat类是OpenCV里使用广泛的一个类,使用它可以轻松的用几行代码实现图像的加载、显示。

先上代码:

// OpenCV_self.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
​
#include "pch.h"
#include <iostream>
#include <opencv2\opencv.hpp>
​
int main()
{cv::Mat img;img = cv::imread("F:/openCV/images/juice.jpg");     // 读取图像
​if (img.empty())    // 判断是否读取成功{std::cout << "导入图像失败!";std::cin.get();     // 读取错误时,为了能在控制台dos窗口看到输出的信息,而不是一闪而过return -1;}else{std::cout << "导入图像成功!";}
​cv::imshow("result", img);    // 显示图像cv::waitKey(0);    // 一直显示图像直到摁下任意键
}

执行结果如下图所示:

imread函数

imread函数的主要作用从一个文件加载图像。

imread函数从一个指定文件读取图像,并返回一个Mat对象,如果图像不能被读取(可能文件路径不对,没有读取权限、不支持的图像格式、错误的图像格式等原因),函数返回一个空的矩阵( Mat::data==NULL )。我们可以用Mat类的empty()函数去判断是否读取到图像。

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
  • 参数1 filename, 读取的图片文件名。

  • 参数2 flags, 一个读取标记,值从cv::ImreadModes获取,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关

  • 返回值,Mat 对象, 返回读取的图像,

目前OpenCV4.4中支持的图像格式如下:

  • Windows bitmaps - *.bmp, *.dib (一直支持)

  • JPEG files - *.jpeg, *.jpg, *.jpe (详情见下面Note 部分)

  • JPEG 2000 files - *.jp2 (详情见下面Note 部分)

  • Portable Network Graphics - *.png (详情见下面Note 部分)

  • WebP - *.webp (详情见下面Note 部分)

  • Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (一直支持)

  • PFM files - *.pfm (详情见下面Note 部分)

  • Sun rasters - *.sr, *.ras (一直支持)

  • TIFF files - *.tiff, *.tif (详情见下面Note 部分)

  • OpenEXR Image files - *.exr (详情见下面Note 部分)

  • Radiance HDR - *.hdr, *.pic (一直支持)

  • Raster and Vector geospatial data supported by GDAL (详情见下面Note 部分)

@注意

  • 函数是通过文件内容得到图像的格式,而不是文件的扩展名决定的,也就是说你把JPEG文件改成.png扩展名,读出来的还是JPEG文件类型。所以说修改文件后缀名来改变文件类型是错误的。

  • 彩色图像数据,通道数据是以 B G R顺序存放的。.

  • 使用IMREAD_GRAYSCALE时,其使用的是内建的灰度转换方式,如果可用的话,其输出结果可能与cvtColor()输出的结果不同。

  • 在Microsoft Windows操作系统和苹果的 MacOS操作系统中, OpenCV 图像编解码默认使用(libjpeg,libpng, libtiff, and libjasper),所以在MacOSX中还有一个选择使用本地的MacOSX 图像阅读器,但是注意的是由于MacOSX内置的颜色管理,当前本地的图像加载器给出的是不同的像素值。

  • 对于 Linux*, BSD flavors和其他类似于Unix的开源操作系统,OpenCV寻找系统提供的编码器,安装相关的包(开发包,例如, 在Debian*和 Ubuntu 中的"libjpeg-dev")来获得编码支持,或者在CMake中选中OPENCV_BUILD_3RDPARTY_LIBS标志,自己去编译这些开发包。

  • 当你设置WITH_GDAL标志为true,并且使用 IMREAD_LOAD_GDAL去加载图像,GDAL驱动将会被使用去解码图像,支持以下格式:

    Raster, Vector.

  • 如果图像文件包含EXIF信息, EXIF的 orientation (照片的方向)参数将会被考虑在内。图像可以根据这个参数对应的旋转。除非标志 IMREAD_IGNORE_ORIENTATION和 IMREAD_UNCHANGED被传递(大概是不让旋转)。

  • 使用IMREAD_UNCHANGED标志来保持PFM图像的浮点值.

  • 像素数缺省值必须小于,限制可以通过系统变量OPENCV_IO_MAX_IMAGE_PIXELS来设置。

imshow函数

imshow函数功能就是在指定的窗口显示一个图像。

函数原型:

CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
  • 参数1 winname 窗口名字.

  • 参数2 mat 显示图像的Mat对象.

如果窗口创建时使用了cv::WINDOW_AUTOSIZE 标志,图像以他的原始大小显示, 但是他仍受屏幕分辨率的限制。 否则, 图像将会被按比例缩放去适应窗口。函数可以缩放图像,依赖图像的深度:

  • 如果图像是8位无符号整型,显示的也是8位无符号整型。

  • 如果图像是 16位无符号整型 或32位整型,像素数被256整除. 也就是说取值区间从 [0,255*256] 映射到 [0,255].

  • 如果图像是32位或64位浮点数, 像素值会被乘以255. 也就是说值区间从 [0,1] 映射到 [0,255].

如果窗口创建时支持OpenGL , cv::imshow 也支持 ogl::Buffer , ogl::Texture2D 和cuda::GpuMat 作为输入。

如果窗口没有在使用本函数前创建,假定使用标志cv::WINDOW_AUTOSIZE创建窗口.

如果你需要显示一个图像大于屏幕的分辨率,你需要在imshow之前调用 namedWindow("", WINDOW_NORMAL) .

@注意

本函数后面应该跟着cv::waitKey 函数来显示指定毫秒数显示时间的图像,否则将不会显示图像,例如, waitKey(0) 将会一直显示显示图像直到摁下键盘任意键,(这个适合显示图像). waitKey(25) 将会显示一帧图像25 毫秒, 然后显示就会自动关闭. (如果你把他放到一个循环里去读视频,他将会一帧一帧的显示视频)。

@注意

[仅限Windows] 摁 Ctrl+C 组合键复制图像到剪切板.

[仅限Windows] 摁Ctrl+S 组合键将会显示一个对话框去保存图像。

OpenCV图像的加载、显示相关推荐

  1. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  2. OpenCV:01图片视频的加载显示

    文章目录 **学习目标:** 图像与视频的加载显示 导入OpenCV的包`cv2` 窗口操作 计算按键的`ASCII`值 读取图片 用其他插件来读取(以`matplotlib`为例) 用`OpenCV ...

  3. Python机器视觉--OpenCV入门--OpencCV的安装与图片加载显示

    1. 安装OpenCV 执行pip install opencv-python==3.4.1.15, 3.4.2之后有些算法申请了专利,用不了了.(使用其他版本也可以) 安装opencv扩展包(选装) ...

  4. java 显示网页gif_Java在窗口上加载显示GIF动画图像

    Java在窗口上加载显示GIF动画图像,将多个独立的GIF图像串联在一起显示,形成GIF特有的动画形式.主要代码如下: ImageIcon[] images; //用于动画的图标数组 Timer an ...

  5. glide 加载webp_如何使您的网站通过WebP图像快速加载闪电

    glide 加载webp by Carmen Chung 通过钟Car 如何使您的网站通过WebP图像快速加载闪电 (How to make your website load lightning f ...

  6. three.js 加载显示文字

    three.js 加载显示文字 代码放到 ./three.js/examples/ 下 <!DOCTYPE html> <html lang="en">&l ...

  7. Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?

    1. 在Activity调用onCreate()等生命周期之前,Activity会调用attach()方法,而在attach()方法中会调用如下代码 onAttach() {PolicyManager ...

  8. thinkphp+ajax无刷新分页并加载显示图片

    2019独角兽企业重金招聘Python工程师标准>>> 最近自己用thinkphp和bootstrap做一个小站点,在用到ajax与后台数据库交互实现无刷新分页时,因为我需要返回的数 ...

  9. Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示(附代码下载)

    场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...

最新文章

  1. 软件测试培训完就业方向怎么选择
  2. 深入Redis内部-Redis 源码讲解
  3. 面试问:Kafka 为什么速度那么快?
  4. 第二章java编程基础测试题_Java编程基础测试题分享
  5. PHP CLI应用的调试原理
  6. 转 html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
  7. mysql添加完全一样的一条记录_MYSQL插入一条新的数据的时候,判断表中是否有相同数据的SQL怎么写?...
  8. Objects.equals 有坑!!!
  9. 一、kafka安装下载与kafka初步应用
  10. 【PAT甲】1051 Pop Sequence (25分)判断出栈顺序的合法性
  11. 基于微信小程序的透析耗材管理系统
  12. HG255d 刷最新openwrt Pandorabox并安装njit拨号
  13. 超声成像突破衍射极限,有望检测肿瘤
  14. 大学计算机简单的感想,爱计算机的我大学生活感悟
  15. 20年研发管理经验谈(十七)(终结)
  16. 盘点7款常用的数据分析工具
  17. 哪些企业可以做知识产权贯标,你不得不了解的事!
  18. Win7虚拟机无法连接网络怎么办?已解决!!
  19. 不确定性量化 (UQ) 可以显著提高预测准确性,在不确定的世界中获得最佳结果昆士兰大学Mike McKerns-中国学者网
  20. 易基因技术推介 | 微量cfDNA简化基因组甲基化测序(cfDNA-RBS)

热门文章

  1. boost::multiprecision模块complex128相关的测试程序
  2. boost::hana::monadic_fold_left用法的测试程序
  3. VTK:Utilities之ShepardMethod
  4. VTK:PolyData之ColoredPoints
  5. VTK:绘图之ParallelCoordinates
  6. VTK:隐式函数之ImplicitSphere1
  7. VTK:图片之ImageLuminance
  8. OpenGL textures combined组合纹理的实例
  9. c++ extern “C”
  10. QT的QWizard类的使用