OpenCV  4.10.0
开源计算机视觉
正在加载...
正在搜索...
没有匹配项
将 OpenCV 与 Eclipse(插件 CDT)配合使用

上一篇教程: 将 OpenCV 与 gcc 和 CMake 配合使用
下一篇教程: 在 Windows 系统中安装

原作者Ana Huamán
兼容性OpenCV >= 3.0
警告
本教程可能包含过时信息。

先决条件

两种方法,一种是直接构架一个项目,另一种是 CMake 先决条件

  1. 在你的工作站中安装了 Eclipse(只需要用于 C/C++ 的 CDT 插件)。你可以按照以下步骤操作
  2. 已经安装了 OpenCV。如果没有安装,请转到 此处

构架一个项目

  1. 启动 Eclipse。只需运行文件夹中提供的可执行文件。
  2. 转到 文件 -> 新建 -> C/C++ 项目
  1. 为你的项目选择一个名称(即 DisplayImage)。对于此示例,一个 空项目 就可以了。
  1. 保留其他所有默认设置。按 完成
  2. 你的项目(在此示例中为 DisplayImage)应会显示在 项目导航器 中(通常位于窗口左侧)。
  1. 现在,让我们使用 OpenCV 添加一个源文件
    • 右键单击 DisplayImage(在导航器中)。新建 -> 文件夹
  • 将你的文件夹命名为 src,然后点击 完成
  • 右键单击你新创建的 src 文件夹。选择 新源文件
  • 将其命名为 DisplayImage.cpp。点击 完成
  1. 因此,你现在有一个包含一个空 .cpp 文件的项目。让我们为其填充一些示例代码(换句话说,复制并粘贴以下代码片段)
    #include <opencv2/opencv.hpp>
    using namespace cv;
    int main( int argc, char** argv )
    {
    Mat image;
    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;
    }
    n 维度密集数组类
    定义 mat.hpp:812
    uchar * data
    指向数据的指针
    定义 mat.hpp:2140
    int main(int argc, char *argv[])
    定义 highgui_qt.cpp:3
    文件存储的“黑匣子”表示形式,关联着磁盘上的文件。
    定义 core.hpp:102
  2. 我们仅缺少最后一步:告诉 OpenCV,OpenCV 头文件和库位于何处。为此,执行以下操作
    • 转至 Project–>Properties
    • C/C++ Build 中,单击 Settings。在右侧,选择 Tool Settings 标签。在此我们将输入头文件和库信息
      1. 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
  1. 现在转至 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 中输入

pkg-config --libs opencv

我的输出(如果您想查看)是

-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

  • 您的项目应已准备好进行构建。为此,转至 Project->Build all

    在控制台,您应获得类似以下内容

如果检查文件夹,应在其中看到一个可执行文件。

运行可执行文件

好了,现在我们已准备好运行一个可执行文件。如果我们使用 Terminal,则可能会执行类似以下操作

cd <DisplayImage_directory>
cd src
./DisplayImage ../images/HappyLittleFish.png

假设要作为参数使用的图像位于 <DisplayImage_directory>/images/HappyLittleFish.png。我们仍可以执行此操作,但我们从 Eclipse 中执行

  1. 转至 Run->Run Configurations
  2. 在 C/C++ Application 下,您将看到可执行文件的名称 + Debug(如果没有,请单击 C/C++ Application 几次)。选择该名称(在此案例中为 DisplayImage Debug)。
  3. 现在,在窗口的右侧,选择 Arguments 标签。编写要打开的图像文件的路径(相对于工作区/DisplayImage 文件夹的路径)。我们使用 HappyLittleFish.png
  1. 点击应用按钮,然后在运行中。应当会弹出一个 Opencv 窗口,其中显示了鱼的图像(或您使用过的其他图像)。
  1. 恭喜!您已经准备好了在 Eclipse 中使用 OpenCV 来获得乐趣。

V2:使用 CMake+OpenCV 和 Eclipse(插件 CDT)

假设您有一个或创建了一个新文件,helloworld.cpp,在名为foo的目录中

#include <opencv2/opencv.hpp>
using namespace cv;
int main ( int argc, char **argv )
{
Mat img(480, 640, CV_8U);
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
  1. 创建一个构建目录,比如在foo下:mkdir /build。然后 cd build。
  2. 把一个CmakeLists.txt文件放入构建
    PROJECT( helloworld_proj )
    FIND_PACKAGE( OpenCV REQUIRED )
    ADD_EXECUTABLE( helloworld helloworld.cxx )
    TARGET_LINK_LIBRARIES( helloworld \f${OpenCV_LIBS} )
  3. 运行:cmake-gui .. 确保填写 OpenCV 的构建位置。
  4. 然后点击配置,然后生成。如果正常,退出 cmake-gui
  5. 运行make -j4(-j4 是可选的,它只是告诉编译器使用 4 个线程进行构建)。确保构建成功。
  6. 启动 Eclipse。把工作区放在某一个目录,但不能在 foo 或 foo\build
  7. 在项目资源管理器部分右键单击,选择导入,然后打开 C/C++ 过滤器。选择现有代码作为 Makefile 项目。
  8. 给项目命名,比如helloworld。浏览到现有的代码位置foo\build(在该位置运行了 cmake-gui)。选择“*索引设置的工具链*”中的Linux GCC,然后按完成
  9. 在项目资源管理器部分右键单击。选择属性。在 C/C++ 构建下,把构建目录从像 ${workspace_loc:/helloworld} 的内容更改为 ${workspace_loc:/helloworld}/build,因为这是构建的目标位置。
    1. 您还可以选择修改构建命令:从 make 改为像 make VERBOSE=1 -j4 的内容,这会告知编译器生成用于调试的详细符号文件,并且会使用 4 个并行线程编译。
  10. 完成!