OpenCV:一、加载和显示图像

前言

VS2019如何配置OpenCV参考后续连接,作者写的非常详细。链接:[https://blog.csdn.net/qq321772514/article/details/90514538]

目标

本章中,将学习如何:

  • 加载图像(使用cv::imread)
  • 创建OpenCV窗体(使用cv::namedWindow)
  • 在OpenCV窗体中显示图像(使用cv::imshow)

源代码

#include 
#include 
#include 
#include 
#include 
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;
}

说明

在OpenCV2中,我们有多个算法模块。每个人负责维护和处理不同的区域或方法。在调用其中任何一个之前,首先需要包含每个单独模块内容的头文件。常用算法模块:

  • 核心部分(core.hpp),定义了图书馆的基本构建块
  • 图形界面部分(highgui.hpp),定义了输入和输出操作的功能
  • iostream部分,定义控制台线路输出和输入
#include < opencv2 / core.hpp >
#include < opencv2 / imgcodecs.hpp >
#include < opencv2 / highgui.hpp >
#include 
#include 

同时,为了避免与其他库的数据结构和函数名冲突,OpenCV有自己的命名空间:cv。为了避免在调用每个函数之前都需要附加:cv关键字,可以使用方法在整个文件中导入命名空间:

using namespace cv;

首先,声明一个有效的图像名称参数。否则默认拍照:"TestImage.jpg".

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

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

 Mat image;

现在我们调用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::nameWindow函数创建一个OpenCV窗口。需要指定其名称,以及窗体大小是否自适应图像大小。

  • 如果不使用Qt后端,WINDOW_AUTOSIZE是唯一支持的。在这种情况下,显示的图像大小将占据窗口的大小。不允许调整大小!
  • WINDOW_NORMAL在Qt中可以使用它来允许窗口调整大小。图像将根据当前窗口大小自行调整大小。通过使用还需要指定是否希望图像保持其宽高比(WINDOW_KEEPRATIO)(WINDOW_FREERATIO)。
namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.

最后,通过使用cv :: imshow函数。指定要更新的OpenCV窗口名称和要使用的图像:

 imshow( "Display window", image );     

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

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

结果

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

你可能感兴趣的:(OpenCV:一、加载和显示图像)