在eclipse CDT中配置opencv环境

以前我用JavaCV写过简单的图像处理的程序, 不过这次某些算法只能用c++写了。

下面是我在eclipse中配置opencv的过程。前提是已经安装具有CDT插件的eclipse。

操作步骤:

 1. 下载并且安装MinGW,然后添加到系统环境变量,如我的安装目录:  c:/mingw,那么将PATH中加入:c:/mingw/bin

 2. 从 http://www.cmake.org 下载cmake,然后安装。

 3. 下载opencv的windows版本。

 4. 解压 Opencv 到 C:\OpenCV246PC\  (README,index.rst 和CMakeLists.txt 都在其子目录下)

 5. 运行 CMake GUI tool

 6. 选择 C:\OpenCV246PC\ 作为 source

 7. 选择输出目录( destination), C:\OpenCV246MinGW\x86  这里存放编译之后的文件。

 8. 点击 Configure按钮,选择MinGWMakefiles作为generator。这里有许多红色的高亮的显示条目,选择你需要的就行。

 9. 再次点击Configure按钮,开始Configuring。。。 

 10. 点击 Generate 按钮 .

 11. 等待生成结束后退出程序。

 12. 退出Cmake。.

 13. 打开cmd窗口,然后进入 C:\OpenCV246MinGW\x86 文件夹下。

 14. 输入"mingw32-make" (不要带引号). 将会看到编译的进度。如果命令没有找到,请确认是否添加了系统环境变量 c:/mingw/bin.。.

 15. 添加系统环境变量,在PATH中添加编译后的bin文件夹, C:\OpenCV246MinGW\x86\bin

 16.重启计算机

 17. 打开Eclipse CDT, 创建一个c++工程, 测试简单的opencv代码。.

 18. 打开Project > Properties > C/C++ Build > Settings > GCCC++ Compiler > Includes, 添加opencv源码目录 (including quotationmarks) "C:\OpenCV246PC\build\include"

 19.打开 Project > Properties > C/C++ Build > Settings >MinGW C++ Linker > Libraries, and add to the Libraries (-l)ONEBY ONE (this could vary from project to project, you can add all of them if youlike or some of them just the ones that you need for your project): 

opencv_calib3d246
opencv_contrib246
opencv_core246
opencv_features2d246
opencv_flann246
opencv_gpu246
opencv_highgui246
opencv_imgproc246
opencv_legacy246
opencv_ml246
opencv_nonfree246
opencv_objdetect246
opencv_photo246
opencv_stitching246
opencv_video246
opencv_videostab246

 20. 增加 Library search path (-L) "C:\OpenCV246MinGW\x86\lib"

测试代码:

#include<opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(){
	Mat img = imread("c:/lenna.png", CV_LOAD_IMAGE_COLOR);

	namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);
	imshow("MyWindow", img);

	waitKey(0);
	return 0;
}

下面是编译OpenCV时遇到的一些问题:

1.

error: 'BTNS_BUTTON' was not declared in this scope
 WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,

这个问题主要就是有几个变量没有找到,后来在一个opencv的issues里找到了解答,大概意思就是在mingw的头文件commctrl.h中,对于上面的变量宏的定义实际上是由_WIN32_IE是否定义来决定的,然而我们找到这个头文件的时候,他的写法是这样:

#include <prsht.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 0
#define _WIN32_IE    0x0300
#endif
#endif

看提示我们也知道,默认根本就不可能找到_WIN32_IE这个变量(后来查了一下,这个变量应该是规定所谓的windows的ie浏览器版本的变量,不知道怎么和opencv扯上了关系),所以上面那个issues的建议是改成:

#include <prsht.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 1
#define _WIN32_IE    0x0500
#endif
#endif

那个0x0500也是我照改的,改完之后我确实能编译通过了,不知道保持原样会怎么样,不过我觉得既然IE版本跟opencv的win32gui没什么太大的关系,那应该是随便,只要定义一个就好。总而言之,这个问题暂时算是解决了。

2.

error: unrecognized command line option '-fomit-rame-pointer'

这个问题其实不算issuse, 我也不知道因为什么导致这个问题, 我打开modules/highgui/CMakeFiles/pch_Generate_opencv_perf_highgui.dir/里的build.make文件看61行根本就找不到-fomit-rame-pointer这个参数, 反过来有个-fomit-frame-pointer。而且这个就是编译器提示的正确参数名, 各种尝试以后把它改成-fomit--frame-pointer后才能编译通过。 这个问题也暂时算是解决了, 嘿嘿。

猜你喜欢

转载自my.oschina.net/quttap/blog/1784702