通过Eclipse(CDT)使用OpenCV
先决条件
两种方式,一个直接构成一个项目,另一个通过CMake的条件决定。
- 在你的工作电脑中安装Eclipse。(仅需要安装C/C++所需的CDT插件)。你可以根据下面的步骤来做。
- 进入Eclipse站点。
- 下载Eclipse IDE for C/C++ Developer。根据你的平台选择需要的版本。
- 安装OpenCV,如果还没有请看这里。
制作一个项目
- 启动Eclipse。只需要运行目录里面的可执行文件就可以了。
- 选择File->New->C/C++ Project
- 选择适合你的项目名称(例如:DisplayImage)。Empty Project应该是一个比较好的例子。
- 其他选项全部使用默认。接下来按完成。
- 你的项目(目前是DisplayImage)应当出现在Project Navigator里面(通常在窗口的左侧)。
- 现在使用OpenCV,添加一个源码文件:
- 鼠标右键点击DisplayImage(在Navigator里)。New->Folder。
- 目录名称命名为src并且点击Finish。
- 右键点击你刚刚新建的src目录。选择New Source file:
- 源码文件命名为DisplayImage.cpp。点击Finish。
- 鼠标右键点击DisplayImage(在Navigator里)。New->Folder。
-
到现在你的空项目里已经有了一个.cpp文件了。来填入一下简单的代码(换句话说就是拷贝和粘贴下面的偏大)。
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv )
{
Mat image;
image = imread( argv[1], 1 );
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;
} -
我们唯独缺少最后的步骤:告诉OpenCV它的头文件和库在什么位置。使用如下的操作:
- 选择Project->Properties
- 在C/C++ Build里点击Settings。在右侧选择Tool Settings标签。这里我们将开始填写进入头文件和库的信息:
- 展开GCC C++ Compiler,进入Include。在Include paths(-l)里你应当添加OpenCV被安装的路径。我们里的例子是/usr/local/include/。
注意:
如果你不知道你的OpenCV文件在那里,打开桌面终端:
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的库。通常前四个就足够是使用了(简单的应用程序)。 在我的例子中。我放去了所有的库因为我计划是全部使用。
opencv_calib3d 、opencv_contrib 、opencv_core 、opencv_features2d 、opencv_flann、opencv_gpu、opencv_highgui、opencv_imgproc、opencv_legacy、opencv_ml、opencv_nonfree、opencv_objdetect、opencv_ocl、opencv_photo、opencv_stitching、opencv_superres、opencv_video、opencv_videostab
如果你不知道你的库在什么位置(或者你忘记了想去去人一下路径下是否存在这些文件),进入终端:
pkg-config --libs opencv
我们的输出可能是这些:
-L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl
现在完成了,点击OK。
- 展开GCC C++ Compiler,进入Include。在Include paths(-l)里你应当添加OpenCV被安装的路径。我们里的例子是/usr/local/include/。
-
你的项目应当真的被编译。例如:选择Project->Build all
你的Eclise Console应当得到如下信息:如果你进入你的文件夹里去检测,应该可以发现一个可执行文件。
运行可执行程序
所以现在我们有一个可执行程序准备去运行。如果我们就会这样使用:
cd <DisplayImage_directory>
cd src
./DisplayImage ../images/HappyLittleFish.png
假设需要作为参数使用的图片路径为/images/HappyLittleFish.png我们依旧可以这样做,但要让Eclipse做呢?
- 选择 Run->Run Configurations
- 在C/C++ Application下面你将发现你的可执行程序名+ Debug(如果没有,就在C/C++ Application上点击几次)。选择名称(例子里选择DisplayImage Debug)。
- 现在,在窗口右侧,选择Arguments标签。填写你将要打开的文件路径(相对路径是workspace/DisplayImage文件夹)使用HappyLittleFish.png。
- 点击Apply按钮并运行。一个带有鱼图片的OpenCV窗口就被弹出了。
但如果提示“cannot open shared object file:”。你则需要在你的/etc/ld.so.conf文件中添加“/usr/local/lib”,然后运行ldconfig。 - 祝贺你,你的Eclipse已经具备使用OpenCV的功能了。
方式2:在Eclipse中使用CMake + OpenCV
假如你在foo目录创建了一个helloworld.cpp的新文件:
#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;
}
- 在foo目录下创建一个build目录:mkdir build,然后进入build目录。
- 在foo目录放入一个CmakeLists.txt文件:
PROJECT( helloworld_proj )
FIND_PACKAGE( OpenCV REQUIRED )
ADD_EXECUTABLE( helloworld helloworld.cpp )
TARGET_LINK_LIBRARIES( helloworld ${OpenCV_LIBS} ) - 运行:cmake-gui…并且确认编译出的opencv被放到这里。
- 点击Configure和Generate,如果提示完成,就可以退出cmake-gui了。
- 在build目录运行 make -j4(-j4这个选项,它是告诉编译编译的时候使用4个线程).确认被编译。
- 启动Eclipse。workspace目录不会要foo/build目录。
- 将刚才的foo目录导入Eclipse File->Import…,展开C/C++项,选择Existing Code as Makefile Project。
-
选择你的项目位置,这里需要选择到foo/build路径。项目名称可以填写为hellowrold。Toolchain for Indexer Settings里面选择Linux GCC然后点击Finish。
- 右键点击Project Explorer里的helloworld项目。选择Properties选项,然后选中C/C++Build,修改Build directory内容,修改为你实际使用的目录。
你还可以修改编译选项:例如make VERBOSE=1 -j4
,就是告诉编译器,编译出Debug时使用的详细的符号文件,和编译器使用4线程。 - 完成。
出处:http://docs.opencv.org/master/d7/d16/tutorial_linux_eclipse.html