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安装时候注意

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

Architecture选择x86_64,安装完毕后将其目录C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin添加至系统的环境变量

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1


添加完毕后在命令行测试

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

OK,环境变量设置成功。

其余的各个软件安装完毕后。

我们来观察一下OpenCV win pack的结构。

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

我们需要利用sources文件夹下面的源码进行编译。

首先我们在OpenCV的build文件夹下建立名为test的文件夹,然后打开cmake进行如下的操作。

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

配置如上的C和C++的编译器,切记这里很关键。

然后点击Finish,界面如下:

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

然后取消BUILD_opencv_python3,ENABLE_PRECOMPILED_HEADERS,ENABLE_PYLINT的勾√,然后点击左下角的Configure,Generate之后完毕后。打开命令行windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1,切换路径到build the binaries的路径。

输入两行命令:

G: 

cd G:\OpenCV-3.3.1\opencv\build1\test

进入输出目录下:

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

ps(由于我之前编译过,之前的目录是build图片上放的是build1,实际是文件夹build,然后

在命令行输入:

mingw32-make

然后开始编译。

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

在我的配置比较低的电脑下大概编译了半个多小时。

之后我们输入命令:

mingw32-make install

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

完毕后我们可以查看输出的文件结构:

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

etc文件夹中放置的是各种分类器。

include文件夹中放置的是.h和.hpp头文件

x64下面有mingw文件:其下面有bin和lib两个文件夹

其中bin下面如下所示:

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

需要将其路径添加到系统的环境变量中去。

之后打开eclipse新建c++ project选择MinGW编译器

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

之后新建完成cpp源文件后,进行一下设置项目设置

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

首先把GCC的C++编译器的头文件路径添加opencv的include文件夹路径。添加完成后进行下一步操作。

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

MinGW C++ Linker的Library search path路径包含OpenCV的lib路径。

Library包括lib文件下面的.dll.a的文件的名字。如下图所示(注意格式)

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1

设置完成后保存输入下面例程代码:



#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一下效果图如下:

windows下的cmake&mingw-w64&eclipse下编译OpenCV3.3.1


总结一下:

1.先将编译好的OpenCV文件的bin文件夹路径添加到系统的环境变量。

2.在系统配置下将头文件(include)的路径包含进去。

3.将linker的的连接路径及程序所需要的.dll.a的名字添加进去。