OpenCV图像的加载和显示

——from Tutorial Section 1.15"Load and Display an Image"

(本文基于OpenCV Tutorials 2.4.11.0进行编写,为符合中文阅读习惯,主要按照译者的理解,进行意译和摘译。代码运行环境为VS2013+OpenCV 2.4.11)


通过本节内容,读者将学习到以下操作:

1.使用imread加载图像;

2.使用namedWindow创建OpenCV命名窗口;

3.使用imshow在第2步创建的窗口中显示图像。


加载和显示图像的示例代码:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>
#include <string>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    // 加载图像
    String imageName( "../data/HappyFish.jpg" ); // 路径改成你自己的
    if( argc > 1)
    {
        imageName = argv[1];
    }
    Mat image;
    image = imread( imageName, CV_LOAD_IMAGE_COLOR); // 读取图像文件

    if( image.empty() )                        // 确认输入图像的有效性
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    // 创建命名窗口
    namedWindow( "Display window", WINDOW_AUTOSIZE );

    // 在命名窗口中显示图像
    imshow( "Display window", image );

    // 窗口等待用户按键退出
    waitKey(0);

    return 0;
}

代码说明

示例代码开头引用了两个重要的头文件core.hpp和highgui.hpp,其中,前者定义了和CV库基本框架搭建相关的函数,后者则主要提供输入输出接口。

紧接着,为省去添加类前缀“cv::”的麻烦,并使程序能够使用STL库,使用了以下命名空间:

using namespace cv;

using namespace std;

然后,进入主函数main()。

在main()中,首先判断程序是否带启动参数argc(图片路径)。如不带启动参数,则采用代码中默认的路径。然后创建一个Mat对象,用于保存imread()返回的图像数据。imread()返回后,检查输入图像的有效性。

    // 加载图像

    String imageName("../data/HappyFish.jpg" ); // 路径改成你自己的

    if( argc > 1)

    {

        imageName = argv[1];

    }

    Mat image;

    image = imread( imageName, CV_LOAD_IMAGE_COLOR);// 读取图像文件

    if( image.empty() )                        // 确认输入图像的有效性

    {

        cout <<  "Could not open or find the image"<< std::endl ;

        return -1;

    }

imread()包含两个参数,参数1是图像路径,参数2指定读取格式。imread()支持以下三种读取格式:

CV_LOAD_IMAGE_UNCHANGED:按图像原始格式读取

CV_LOAD_IMAGE_GRAYSCALE:灰度图

CV_LOAD_IMAGE_COLOR:以RGB格式读取

如果未指定参数2,则默认格式为CV_LOAD_IMAGE_COLOR。

目前主流的图片格式,如jpeg、bmp、tif、png等,imread()都支持。

namedWindow( "Displaywindow", WINDOW_AUTOSIZE );

确认输入图像的有效性后,程序调用namedWindow()函数创建一个命名窗口。创建出来的窗口由OpenCV自动管理,用户只需要指定窗口名称(参数1),以及按何种方式显示大小(参数2)。其中,参数2可指定为WINDOW_AUTOSIZE和WINDOW_NORMAL,WINDOW_AUTOSIZE是默认值,代表窗口大小和图像大小保持一致。WINDOW_NORMAL只有在QT平台才能使用,代表图像大小随当前窗口大小进行显示。

窗口创建后,调用imshow()在创建的窗口上显示图像。imshow()的第一个参数指定窗口的名称,第二个参数为前面读取到的图像。

imshow( "Displaywindow", image );

最后,调用waitKey(0),让窗口一直保持显示状态,直到发生用户按键事件。waitKey()只有一个参数,该参数的单位是毫秒,如果设为0,则表示无限等待。


程序编译运行效果如下:


用户按下键盘任意键后,程序退出。


猜你喜欢

转载自blog.csdn.net/ShadowN1ght/article/details/77769995
今日推荐