windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1
在window下面使用C++开发OpenCV必要的几个包:
1.Eclipse IDE for C/C++ Developers http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/keplersr2
2.MinGW-w64 - for 32 and 64 bit Windows https://sourceforge.net/projects/mingw-w64/
3.cmake https://cmake.org/download/
4.OpenCV 3.3.1 windows pack
MinGW-w64安装时候注意
Architecture选择x86_64,安装完毕后将其目录C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin添加至系统的环境变量
添加完毕后在命令行测试
OK,环境变量设置成功。
其余的各个软件安装完毕后。
我们来观察一下OpenCV win pack的结构。
我们需要利用sources文件夹下面的源码进行编译。
首先我们在OpenCV的build文件夹下建立名为test的文件夹,然后打开cmake进行如下的操作。
配置如上的C和C++的编译器,切记这里很关键。
然后点击Finish,界面如下:
然后取消BUILD_opencv_python3,ENABLE_PRECOMPILED_HEADERS,ENABLE_PYLINT的勾√,然后点击左下角的Configure,Generate之后完毕后。打开命令行,切换路径到build the binaries的路径。
输入两行命令:
G:
cd G:\OpenCV-3.3.1\opencv\build1\test
进入输出目录下:
ps(由于我之前编译过,之前的目录是build图片上放的是build1,实际是文件夹build,然后
在命令行输入:
mingw32-make
然后开始编译。
在我的配置比较低的电脑下大概编译了半个多小时。
之后我们输入命令:
mingw32-make install
完毕后我们可以查看输出的文件结构:
etc文件夹中放置的是各种分类器。
include文件夹中放置的是.h和.hpp头文件
x64下面有mingw文件:其下面有bin和lib两个文件夹
其中bin下面如下所示:
需要将其路径添加到系统的环境变量中去。
之后打开eclipse新建c++ project选择MinGW编译器
之后新建完成cpp源文件后,进行一下设置项目设置
首先把GCC的C++编译器的头文件路径添加opencv的include文件夹路径。添加完成后进行下一步操作。
MinGW C++ Linker的Library search path路径包含OpenCV的lib路径。
Library包括lib文件下面的.dll.a的文件的名字。如下图所示(注意格式)
设置完成后保存输入下面例程代码:
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#define w 400
#define zigbee 1000
using namespace cv;
void MyEllipse( Mat img, double angle );
void MyFilledCircle( Mat img, Point center );
void MyPolygon( Mat img );
void MyLine( Mat img, Point start, Point end );
int main( void ){
char atom_window[] = "Drawing 1: Atom";
char rook_window[] = "Drawing 2: Rook";
Mat atom_image = Mat::zeros( w, w, CV_8UC3 );
Mat rook_image = Mat::zeros( w, w, CV_8UC3 );
MyEllipse( atom_image, 90 );
MyEllipse( atom_image, 0 );
MyEllipse( atom_image, 45 );
MyEllipse( atom_image, -45 );
MyFilledCircle( atom_image, Point( w/2, w/2) );
MyPolygon( rook_image );
rectangle( rook_image,
Point( 0, 7*w/8 ),
Point( w, w),
Scalar( 0, 255, 255 ),
FILLED,
LINE_8 );
MyLine( rook_image, Point( 0, 15*w/16 ), Point( w, 15*w/16 ) );
MyLine( rook_image, Point( w/4, 7*w/8 ), Point( w/4, w ) );
MyLine( rook_image, Point( w/2, 7*w/8 ), Point( w/2, w ) );
MyLine( rook_image, Point( 3*w/4, 7*w/8 ), Point( 3*w/4, w ) );
imshow( atom_window, atom_image );
moveWindow( atom_window, 0, 200 );
imshow( rook_window, rook_image );
moveWindow( rook_window, w, 200 );
waitKey( 0 );
return(0);
}
void MyEllipse( Mat img, double angle )
{
int thickness = 2;
int lineType = 8;
ellipse( img,
Point( w/2, w/2 ),
Size( w/4, w/16 ),
angle,
0,
360,
Scalar( 255, 0, 0 ),
thickness,
lineType );
}
void MyFilledCircle( Mat img, Point center )
{
circle( img,
center,
w/32,
Scalar( 0, 0, 255 ),
FILLED,
LINE_8 );
}
void MyPolygon( Mat img )
{
int lineType = LINE_8;
Point rook_points[1][20];
rook_points[0][0] = Point( w/4, 7*w/8 );
rook_points[0][1] = Point( 3*w/4, 7*w/8 );
rook_points[0][2] = Point( 3*w/4, 13*w/16 );
rook_points[0][3] = Point( 11*w/16, 13*w/16 );
rook_points[0][4] = Point( 19*w/32, 3*w/8 );
rook_points[0][5] = Point( 3*w/4, 3*w/8 );
rook_points[0][6] = Point( 3*w/4, w/8 );
rook_points[0][7] = Point( 26*w/40, w/8 );
rook_points[0][8] = Point( 26*w/40, w/4 );
rook_points[0][9] = Point( 22*w/40, w/4 );
rook_points[0][10] = Point( 22*w/40, w/8 );
rook_points[0][11] = Point( 18*w/40, w/8 );
rook_points[0][12] = Point( 18*w/40, w/4 );
rook_points[0][13] = Point( 14*w/40, w/4 );
rook_points[0][14] = Point( 14*w/40, w/8 );
rook_points[0][15] = Point( w/4, w/8 );
rook_points[0][16] = Point( w/4, 3*w/8 );
rook_points[0][17] = Point( 13*w/32, 3*w/8 );
rook_points[0][18] = Point( 5*w/16, 13*w/16 );
rook_points[0][19] = Point( w/4, 13*w/16 );
const Point* ppt[1] = { rook_points[0] };
int npt[] = { 20 };
fillPoly( img,
ppt,
npt,
1,
Scalar( 255, 255, 255 ),
lineType );
}
void MyLine( Mat img, Point start, Point end )
{
int thickness = 2;
int lineType = LINE_8;
line( img,
start,
end,
Scalar( 0, 0, 0 ),
thickness,
lineType );
}
build完成后run一下效果图如下:
总结一下:
1.先将编译好的OpenCV文件的bin文件夹路径添加到系统的环境变量。
2.在系统配置下将头文件(include)的路径包含进去。
3.将linker的的连接路径及程序所需要的.dll.a的名字添加进去。