OpenCV 图像加载和显示

OpenCV 图像加载和显示

加载图像(使用cv :: imread)

创建一个名为OpenCV的窗口(使用cv :: namedWindow)

在OpenCV窗口中显示图像(使用cv :: imshow)**

#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" ); // by default
    if( argc > 1)
    {
        imageName = argv[1];
    }
    Mat image;
    image = imread( imageName, IMREAD_COLOR ); // Read the file
    if( image.empty() )                      // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
    imshow( "Display window", image );                // Show our image inside it.
    waitKey(0); // Wait for a keystroke in the window
    return 0;
}

说明

在OpenCV 2中,我们有多个模块。每个人负责处理不同的区域或方法。您可以在这些教程本身的用户指南的结构中观察到这一点。在您使用其中任何一个之前,您首先需要包含声明每个单独模块内容的头文件。

你几乎总是最终使用:

核心部分,这里定义了图书馆的基本构建块
highgui模块,因为它包含输入和输出操作的功能

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

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

using namespace cv;

对于STL库也是如此(用于控制台I / O)。现在,我们分析一下主要功能。我们开始确保从命令行获取有效的图像名称参数。否则默认拍照:“HappyFish.jpg”。

   String imageName( "../data/HappyFish.jpg" ); // by default
    if( argc > 1)
    {
        imageName = argv[1];
    }

然后创建一个Mat对象,它将存储加载的图像的数据。

Mat image;

现在我们调用加载第一个参数(argv [1])指定的映像名称的cv :: imread函数。第二个参数指定了我们想要的图像的格式。这可能是:

IMREAD_UNCHANGED(<0)按原样加载图像(包括alpha通道(如果存在)
IMREAD_GRAYSCALE(0)将图像作为强度加载
IMREAD_COLOR(> 0)以RGB格式加载图像
    image = imread( imageName, IMREAD_COLOR ); // Read the file

注意事项

OpenCV支持图像格式Windows位图(bmp),便携式图像格式(pbm,pgm,ppm)和Sun光栅(sr,ras)。在插件的帮助下(您需要指定使用它们,如果您建立自己的库,但是在我们出货的包中,默认情况下)您也可以加载像JPEG(jpeg,jpg,jpe),JPEG 2000(jp2 - 代号为CMake的Jasper),TIFF文件(tiff,tif)和便携式网络图形(png)。此外,OpenEXR也是一种可能性。
检查图像数据是否正确加载后,我们要显示图像,因此我们使用cv :: namedWindow函数创建一个OpenCV窗口。创建OpenCV后,它们将自动进行管理。为此,您需要指定其名称,以及如何从大小角度处理其包含的图像的更改。可能是:

如果不使用Qt后端,WINDOW_AUTOSIZE是唯一支持的。在这种情况下,窗口大小将占据显示的图像的大小。不允许调整大小!
WINDOW_NORMAL在Qt你可以使用它来允许窗口调整大小。图像将根据当前窗口大小自行调整大小。通过使用| 操作员还需要指定是否希望图像保持其宽高比(WINDOW_KEEPRATIO)(WINDOW_FREERATIO)。

namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.

最后

要使用新的图像更新OpenCV窗口的内容,请使用cv :: imshow函数。指定要更新的OpenCV窗口名称和此操作期间要使用的映像:

imshow( "Display window", image );                // Show our image inside it.

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

waitKey(0); // Wait for a keystroke in the window

结果

编译代码,然后运行可执行文件,将图像路径作为参数。如果你在Windows上,可执行文件当然也会包含一个exe扩展名。当然确保图像文件靠近你的程序文件。

./DisplayImage HappyFish.jpg

你应该得到一个漂亮的窗口,如下所示:
OpenCV 图像加载和显示
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

star__king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值