Qt+OpenCV联合开发(二)--图像读取与显示

一、图像读取

1、imread()函数

imread为image read的缩写,作用就是负责读取图像。其实学过matlab的同学就会知道,matlab中也有一个读取图像的函数也命名为imread,这是opencv借鉴了matlab而命名的,因为在opencv1.x时代,加载图像是由cvLoadImage函数负责,并不是imread,。

图像读取进来作为Mat,opencv中所有的图像都是Mat(matrix,矩阵,二维数组)

头文件:#include "opencv2/imgproc.hpp"

c++原型:

 参数一:filename,图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀)

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

参数二补充:

1、flags = 0:按单通道的方式读入图像,即灰白图像  

//    CV_LOAD_IMAGE_GRAYSCALE

2、flags = 1:按三通道(BGR)方式读入,即彩色图像  

//     CV_LOAD_IMAGE_COLOR

3、flags = -1:按解码得到的方式读入   //   CV_LOAD_IMAGE_UNCHANGED

4、有时候图像是浮点数据或其他类型数据,我们需要更多的进行处理,则参数调整为任意颜色  //  IMREAD_ANYCOLOR

5、可能不是8位,是其他16位、32位的图像  //  IMREAD_ANYDEPTH

注:

  • 三通道:每个通道一个字节,一个字节8位,位图的深度就为24位
  • 在opencv在检查深度时候不会告诉你是24位,在里面它只是一个深度的表示,是用一个枚举类型的值表示,可能是1,就代表24位(如src.depth()查看图像深度返回1)

二、图像显示

1、imshow()函数

头文件:#include "opencv2/highgui.hpp"

c++原型:

  参数一:winname,窗口名称。 可以使用cv::namedWindow函数创建窗口,如不创建,imshow函数将自动创建。

  参数二:tex,图片的Mat对象。

注:

  • 您可以创建任意数量的窗口,但必须使用不同的窗口名称。
  • 如果跟窗口名跟namedWindow函数的窗口名一致,则这张图片显示在namedWindow窗口中,否则打开的是两个窗口

对于imshow函数,opencv的官方注释指出:根据图像的深度,imshow函数会自动对其显示灰度值进行缩放,规则如下:

  • 如果图像数据类型是8U(8位无符号),则直接显示。
  • 如果图像数据类型是16U(16位无符号)或32S(32位有符号整数),则imshow函数内部会自动将每个像素值除以256并显示,即将原图像素值的范围由[0~255*256]映射到[0~255]
  • 如果图像数据类型是32F(32位浮点数)或64F(64位浮点数),则imshow函数内部会自动将每个像素值乘以255并显示,即将原图像素值的范围由[0~1]映射到[0~255](注意:原图像素值必须要归一化)

三、使用示例

    //读取进来的数据以矩阵的形式,第2个参数代表显示一张灰度图像
    Mat src = imread("E:/images/qt.png",IMREAD_GRAYSCALE);
    if (src.empty())
    {
        //如果图片不存在在终端提示
        cout<<"could not load image"<

 示例的其他函数:

waitKey(0);//是一个和键盘绑定的函数,它的作用是等待一个键盘的输入(因为我们创建的窗口如果没有这个函数的话会一闪就消失,所以如果需要让它持久输出,我们可以使用该函数)。参数是延迟时间,单位ms,如果您在此期间按下任何键,程序将继续进行。也可以将其设置为一个特定的键。

destroyAllWindows();//销毁前面创建的窗口,如果要销毁任何特定窗口,请使用函数destroyWindow(),其中传递确切的窗口名称作为参数。

四、实现效果

Qt+OpenCV联合开发(二)--图像读取与显示_第1张图片

imshow函数详解参考如下:

https://blog.csdn.net/jgj123321/article/details/95057025

原创不易,转载请注明出处:

https://blog.csdn.net/hml111666/article/details/122641414

你可能感兴趣的:(opencv,Qt实战,C/C++,opencv,qt,计算机视觉)