OpenCV图像的加载、显示

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图像的浮点值.

  • 像素数缺省值必须小于2^{30},限制可以通过系统变量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 组合键将会显示一个对话框去保存图像。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值