按照前文的步骤,我们已经在Windows机器上把OpenCV源代码编译成了DLL。接下来的问题自然是,我们怎么在自己的项目中使用OpenCV?我们将从零开始编写第一个OpenCV “Hello World”程序。通过本文的练习,大家将掌握:
- 在自己的项目中配置OpenCV开发环境,包括include目录、lib目录等等;
- 通过cv::imread函数读取一个图像文件;
- 通过cv::imshow函数将图像在窗口中显示出来;
- 通过cv::imwrite函数将图像写入一个文件。
让我们开始吧!先用Visual Studio创建一个C++的控制台程序,项目命名为OpenCVFirstApp,并让它与opencv源代码目录平级,看起来是这样的:
接着,打开OpenCVFirstApp项目属性窗口,在C/C++页面的“附加包含目录”中加入:
..\opencv\include
..\opencv\build
..\opencv\modules\core\include
..\opencv\modules\highgui\include
..\opencv\modules\imgproc\include
..\opencv\modules\imgcodecs\include
..\opencv\modules\videoio\include
其中,第一个是OpenCV项目的顶级包含目录,第二个是之前编译OpenCV源码时的生成目录,第三个往下是OpenCV各个核心模块的包含目录,可以依据你的项目实际使用情况、用到了哪些模块就把这些模块的包含目录加进来。
再接着,在项目的属性页点击“链接器”,在“输入” | “附加依赖项” 中增加配置:
Debug版本链接的库:
..\opencv\build\lib\Debug\opencv_core4100d.lib
..\opencv\build\lib\Debug\opencv_highgui4100d.lib
..\opencv\build\lib\Debug\opencv_imgproc4100d.lib
..\opencv\build\lib\Debug\opencv_imgcodecs4100d.lib
..\opencv\build\lib\Debug\opencv_videoio4100d.lib
Release版本链接的库:
..\opencv\build\lib\Release\opencv_core4100.lib
..\opencv\build\lib\Release\opencv_highgui4100.lib
..\opencv\build\lib\Release\opencv_imgproc4100.lib
..\opencv\build\lib\Release\opencv_imgcodecs4100.lib
..\opencv\build\lib\Release\opencv_videoio4100.lib
然后,就可以开始编写程序代码了。偷个懒,从opencv开源项目的samples\cpp\tutorial_code\introduction\windows_visual_studio_opencv\introduction_windows_vs.cpp抄一下吧O(∩_∩)O:
// OpenCVFirstApp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
if (argc != 2)
{
cout << " Usage: " << argv[0] << " ImageToLoadAndDisplay" << endl;
return -1;
}
Mat image;
image = imread(argv[1], 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.
imwrite("D:\\opencv_copy.png", image); // Write to a new file
waitKey(0); // Wait for a keystroke in the window
return 0;
}
然后,编译,运行!然后…
怎么回事?忘了非常重要的一步哦:需要把OpenCV的运行时库(在opencv\build\bin目录下)拷贝到目标工程里来,具体而言就是这5个DLL:opencv_core4100.dll、opencv_highgui4100.dll、opencv_imgcodecs4100.dll、opencv_imgproc4100.dll、opencv_videoio4100.dll。这是Release版本的库;Debug版本需要拷贝文件名以字母“d”结尾的一组DLL。
OpenCVFirstApp的完整代码:https://github.com/luqiming666/OpenCVFirstApp