目标

在本教程里你将会学到:
1.加载一张图片(使用imread
2.创建一个名字叫OpenCV的窗口(使用namedWindow
3.在OpenCV窗口显示一张图片(使用 imshow)

源码

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;//--opencv命名空间
using namespace std; //--c++命名空间

int main( int argc, char** argv )
{ 
    if( argc != 2) 
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }
    
    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // 读取文件

    if(! image.data )                              // 检查是否是无效的输入
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );//创建一个窗口用于显示
    imshow( "Display window", image );                   // 在窗口里面显示图片.

    waitKey(0);                                          // 等待键盘按键按下
    return 0;
}

说明

在OpenCV2中,我们有多个模块。每一个模块都是一种图像处理方法。您可以在这些教程本身的用户指南的结构中观察到这一点。在使用其中任何一个模块之前,首先需要包含声明每个模块内容的头文件。
你们几乎总是使用:
1.core部分,这里定义了库的基本构建块
2.highgui模块,因为它包含输入和输出操作的功能

// Video Image PSNR and SSIM
#include <iostream> // for standard I/O
#include <string>   // for strings

我们还包括iostream,以方便控制台行输出和输入。为了避免数据结构和函数名与其他库冲突,opencv有自己的命名空间:cv。为了避免需要在每个关键字之前添加cv:关键字,您可以使用以下行导入整个文件中的命名空间:

using namespace cv;
using namespace std;

这对于stl库也是如此(用于控制台I/O)。现在,让我们分析一下主要的功能。我们开始确保我们从命令行获得一个有效的图像名称参数。

if( argc != 2) 
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

然后创建一个mat对象,该对象将存储加载图像的数据

Mat image;

现在我们调用加载由第一个参数(argv[1])指定的图像名称的imread函数。第二个参数指定了我们想要图像的格式。这可能是:
1.CV_LOAD_IMAGE_UNCHANGED (<0) 按原样加载图像(如果存在,则包括alpha通道)
2.CV_LOAD_IMAGE_GRAYSCALE ( 0) 将图像加载为强度图像
3.CV_LOAD_IMAGE_COLOR (>0) 以rgb格式加载图像

Image=imread(argv[1],cv_load_image_color);/读取文件

注意:OpenCV支持图像格式Windows位图(BMP)、便携式图像格式(PBM、PGM、ppm)和太阳光栅(Sr,ras)。在插件的帮助下(如果您构建了自己的库,您需要指定使用它们,但是在默认情况下,我们提供的包中),您也可以加载像jpeg(jpeg,j pg,jpe),jpeg2000(jp2-在cmake中以jasper命名),tiff文件(tiff,tif)和便携式网络图形(Png)这样的图像格式。此外,OpenExr也是一种可能性。

在检查图像数据是否正确加载后,我们希望显示我们的图像,因此我们使用namedWindow函数创建一个opencv窗口。一旦您创建了窗口,opencv会自动管理。为此,您需要指定它的名称,以及它的大小和角度。可能是:
1.如果不使用qt后端,则只支持CV_WINDOW_AUTOSIZE 。在这种情况下,窗口大小将占用它显示的图像的大小。不允许调整大小!
2.在qt上CV_WINDOW_NORMAL ,您可以使用它来允许窗口调整大小。图像将根据当前窗口大小调整自己的大小。通过使用|运算符,您还需要指定是否希望图像保持其纵横比(cv_window_keepratio)或不(cv_window_freeratio)。
WINDOW_NORMAL 用户便可以改变窗口的大小(没有限制)
WINDOW_AUTOSIZE 窗口大小会自动调整以适应所显示的图像,大小固定。
WINDOW_OPENGL 窗口创建的时候便会支持OpenGL

namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// 创建一个用于显示的窗口.

最后,使用imshow函数更新opencv窗口的内容。指定要在此操作期间更新的opencv窗口名称和要使用的图像:

imshow( "Display window", image );                   // 在窗口里面显示图片

因为我们希望我们的窗口被显示,直到用户按下一个键(否则程序会结束得太快),所以我们使用Waitkey函数,它的唯一参数是它应该等待多长时间的用户输入(以毫秒计)。零意味着永远等待。

waitKey(0);                                          //等待键盘按键

结果

编译代码,然后运行可执行文件,给出一个图像路径作为参数。如果您在windows上,可执行遗嘱当然也包含一个exe扩展。当然,确保图像文件靠近您的程序文件。

./DisplayImage HappyFish.jpg

你应该得到一个很好的窗口,如下所示:

opencv 根据读取的图片创建一个白板 opencv显示一张图片_命名空间