前言
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扩展名。需要确保图像文件路径正确。