OpenCV常用的交互 *** 作—图像的载入,显示

OpenCV常用的交互 *** 作—图像的载入,显示,第1张

OpenCV采用Mat类作为数据结构来进行图像的存取。


本节我们来讲解OpenCV2/3最入门最基础的问题,图像的载入,显示和输出


1.图像的载入,显示和输出到文件
1.1 OpenCV的命名空间
OpenCV中C++的类和函数都是定义在cv命名空间中的,所以我们在调用OpenCV中的类或函数的时候有两种访问方式:
(1)在代码开头加入 using namespace cv; 来规定程序的使用范围;
(2)在使用OpenCV的函数和类时,都加上cv::命名空间;
通常我们在写OpenCV程序的时候,通常需要加入如下内容:

#include    //和imread()中的flags有关
#include   //图形用户界面
using namespace cv;

1.2 Mat类简析
Mat类使用于保存图像或矩阵类形数据的数据结构,默认尺寸为0,我们修改其尺寸,通过定义一个Mat的类对象,cv::Mat pic(320, 640, CV8UC3,cv::Scalar(100));
上述语句表示创建一个大小为320 * 640,图像深度为8数据类型为uchar的三通道数组,每个通道的颜色值为100
1.3 图像的载入:imread() 函数
imread函数,用于读取文件中的图片到OpenCV中,原型:

Mat imread(const string & filename, intflags = 1)

(1)参数1:const string &类型的filename, 填如我们要载入的图片的路径名。



在Window *** 作系统下,OpenCV支持如下类型图像的载入。


  • Windows 位图:*.bmp *.dib
  • JPEG文件 : *.jpeg *.jpg *.jpe
  • JPEG 2000 文件:*.jp2
  • PNG *.png
  • 便携文件格式: *.pbm *pgm(深度图) *.ppm
  • Sun rasters 光栅文件: *.sr *.ras
  • TIFF文件 : *.tiff *.tif
    (2)参数2:int类型的falgs,载入标志,它指示了加载图像的颜色类型。


    默认1。



    这个参数可以在OpenCV中标识图像格式的枚举体中取值。


enum{
/* 8bit, color or not */
    CV_LOAD_IMAGE_UNCHANGED  =-1,
/* 8bit, gray */
    CV_LOAD_IMAGE_GRAYSCALE  =0,
/* ?, color */
    CV_LOAD_IMAGE_COLOR      =1,
/* any depth, ? */
    CV_LOAD_IMAGE_ANYDEPTH   =2,
  };

对标志符的解释:

  • CV_LOAD_IMAGE_UNCHANGED 等价-1,新版中忽略
  • CV_LOAD_IMAGE_GRAYSCALE 等价0,将图像转换为灰度图再返回
  • CV_LOAD_IMAGE_COLOR 等价1,将图像转换到彩色图再返回
  • CV_LOAD_IMAGE_ANYDEPTH 等价2,载入的图像深度为16/32位,就返回对应的深度图像,否则转换为8位图像再返回
    note:
    如果输入有冲突,将采用较小的数值。



    如果想载入最真实无损的原图像,可以选择 V_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR

flags是int值,如不取枚举中固定的值可以这样进行:

  • falgs > 0 返回一个三通道的彩色图
  • flags = 0 返回灰度图
  • falgs < 0 返回alpha通道的加载图像
    note:以彩色模式载入的图像,解码后的图像会以BGR的通道顺序进行存储而不是RGB
    (3)示例:
    Mat image0 = imread(“1.jpg”, 2 | 4); //载入无损的原图像
    Mat image1 = imread(“1.jpg”, 0); //载入灰度图
    Mat image3 = imread(“1.jpg”, 199) ;// 载入彩色图

1.4 图像的显示 :imshow()函数
imshow()函数用于在指定窗口中显示一幅图像。



函数原型:

void inshow(const string& winname, InputArray mat);

(1)参数1: const string&类型winname,填需要的窗口标识名称。



(2)参数2:InputArray类型的mat, 需要显示的图像。



imshow()函数用于在指定的窗口显示图像。


窗口默认值是CV_WINDOW_AUTOSIZE,那么显示图像原始大小。


否则,根据图像的深度进行缩放显示。


具体如下:

  • 如果载入的图像是8位无符号类型,就显示本来的样子。


  • 如果是16位无符号或32位整数,便用像素值除256.也就是说值的范围是[0, 256 * 256]映射到[0,255].
  • 如果图像是3位浮点型,像素值要乘以256.该值的范围[0,1]映射到[0,255]

1.5 关于InputArray类型
在core.hpp中有

typedef const _InputArray& InputArray;

遇到函数原型中的InputArray和OutputArray类型,我们把他们简单当成Mat类型即可。



2,下讲我们将讲图像的输出和滑动条,以及载入,显示,输出的实例。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存