上一篇教程: 将 OpenCV 与 gcc 和 CMake 配合使用
下一篇教程: 在 Windows 系统中安装
| |
原作者 | Ana Huamán |
兼容性 | OpenCV >= 3.0 |
- 警告
- 本教程可能包含过时信息。
先决条件
两种方法,一种是直接构架一个项目,另一种是 CMake 先决条件
- 在你的工作站中安装了 Eclipse(只需要用于 C/C++ 的 CDT 插件)。你可以按照以下步骤操作
- 已经安装了 OpenCV。如果没有安装,请转到 此处。
构架一个项目
- 启动 Eclipse。只需运行文件夹中提供的可执行文件。
- 转到 文件 -> 新建 -> C/C++ 项目
- 为你的项目选择一个名称(即 DisplayImage)。对于此示例,一个 空项目 就可以了。
- 保留其他所有默认设置。按 完成。
- 你的项目(在此示例中为 DisplayImage)应会显示在 项目导航器 中(通常位于窗口左侧)。
- 现在,让我们使用 OpenCV 添加一个源文件
- 右键单击 DisplayImage(在导航器中)。新建 -> 文件夹。
- 将你的文件夹命名为 src,然后点击 完成
- 右键单击你新创建的 src 文件夹。选择 新源文件
- 将其命名为 DisplayImage.cpp。点击 完成
- 因此,你现在有一个包含一个空 .cpp 文件的项目。让我们为其填充一些示例代码(换句话说,复制并粘贴以下代码片段)
#include <opencv2/opencv.hpp>
int main(
int argc,
char** argv )
{
image = imread( argv[1], IMREAD_COLOR );
if( argc != 2 || !image.
data )
{
printf( "No image data \n" );
return -1;
}
namedWindow( "Display Image", WINDOW_AUTOSIZE );
imshow( "Display Image", image );
waitKey(0);
return 0;
}
uchar * data
指向数据的指针
定义 mat.hpp:2140
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
文件存储的“黑匣子”表示形式,关联着磁盘上的文件。
定义 core.hpp:102
- 我们仅缺少最后一步:告诉 OpenCV,OpenCV 头文件和库位于何处。为此,执行以下操作
- 转至 Project–>Properties
- 在 C/C++ Build 中,单击 Settings。在右侧,选择 Tool Settings 标签。在此我们将输入头文件和库信息
- 在 GCC C++ Compiler 中,转至 Includes。在 Include paths(-l) 中,应包括 opencv 安装到的文件夹的路径。在我们的示例中,这是 /usr/local/include/opencv。
- 注意
- 若不知道 opencv 文件位于何处,请打开 Terminal 并输入
pkg-config --cflags opencv
例如,该命令向我提供了以下输出-I/usr/local/include/opencv -I/usr/local/include
现在转至 GCC C++ Linker,在那里有两个空间需要填充
首先,在 Library search path (-L) 中,必须编写 opencv 库所在的路径,在我的案例中,路径是:
/usr/local/lib
然后,在 Libraries(-l) 中,添加可能需要的 OpenCV 库。通常,列表中前 4 个就足够了(适用于简单应用程序)。在我的案例中,我将把它们全部添加进去,因为我计划整体使用它们
opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui opencv_ml opencv_videoio opencv_video opencv_features2d opencv_calib3d opencv_objdetect opencv_flann
如果您不知道库的保存位置(或者只是有些偏执并想确保路径正确),请在 Terminal 中输入
我的输出(如果您想查看)是
-L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_videoio -lopencv_imgcodecs -lopencv_flann
现在您已完成。单击 OK
如果检查文件夹,应在其中看到一个可执行文件。
运行可执行文件
好了,现在我们已准备好运行一个可执行文件。如果我们使用 Terminal,则可能会执行类似以下操作
cd <DisplayImage_directory>
cd src
./DisplayImage ../images/HappyLittleFish.png
假设要作为参数使用的图像位于 <DisplayImage_directory>/images/HappyLittleFish.png。我们仍可以执行此操作,但我们从 Eclipse 中执行
- 转至 Run->Run Configurations
- 在 C/C++ Application 下,您将看到可执行文件的名称 + Debug(如果没有,请单击 C/C++ Application 几次)。选择该名称(在此案例中为 DisplayImage Debug)。
- 现在,在窗口的右侧,选择 Arguments 标签。编写要打开的图像文件的路径(相对于工作区/DisplayImage 文件夹的路径)。我们使用 HappyLittleFish.png
- 点击应用按钮,然后在运行中。应当会弹出一个 Opencv 窗口,其中显示了鱼的图像(或您使用过的其他图像)。
- 恭喜!您已经准备好了在 Eclipse 中使用 OpenCV 来获得乐趣。
V2:使用 CMake+OpenCV 和 Eclipse(插件 CDT)
假设您有一个或创建了一个新文件,helloworld.cpp,在名为foo的目录中
#include <opencv2/opencv.hpp>
int main (
int argc,
char **argv )
{
putText(img,
"Hello World!",
Point( 200, 400 ), FONT_HERSHEY_SIMPLEX | FONT_ITALIC, 1.0,
Scalar( 255, 255, 0 ));
imshow("My Window", img);
waitKey();
return 0;
}
#define CV_8U
定义 interface.h:73
- 创建一个构建目录,比如在foo下:mkdir /build。然后 cd build。
- 把一个
CmakeLists.txt
文件放入构建PROJECT( helloworld_proj )
FIND_PACKAGE( OpenCV REQUIRED )
ADD_EXECUTABLE( helloworld helloworld.cxx )
TARGET_LINK_LIBRARIES( helloworld \f${OpenCV_LIBS} )
- 运行:cmake-gui .. 确保填写 OpenCV 的构建位置。
- 然后点击配置,然后生成。如果正常,退出 cmake-gui
- 运行
make -j4
(-j4 是可选的,它只是告诉编译器使用 4 个线程进行构建)。确保构建成功。
- 启动 Eclipse。把工作区放在某一个目录,但不能在 foo 或
foo\build
中
- 在项目资源管理器部分右键单击,选择导入,然后打开 C/C++ 过滤器。选择现有代码作为 Makefile 项目。
- 给项目命名,比如helloworld。浏览到现有的代码位置
foo\build
(在该位置运行了 cmake-gui)。选择“*索引设置的工具链*”中的Linux GCC,然后按完成。
- 在项目资源管理器部分右键单击。选择属性。在 C/C++ 构建下,把构建目录从像
${workspace_loc:/helloworld}
的内容更改为 ${workspace_loc:/helloworld}/build
,因为这是构建的目标位置。
- 您还可以选择修改构建命令:从 make 改为像
make VERBOSE=1 -j4
的内容,这会告知编译器生成用于调试的详细符号文件,并且会使用 4 个并行线程编译。
- 完成!