在Windows 7 64位上使用MinGW gcc/g ++编译openCV 2.3.1程序

Kir*_*.lv 5 windows opencv mingw cmake

一个星期以来,我一直在努力编译openCV程序.我已经尝试过在互联网上可能找到的一切.

我所做的是:我已经下载了OpenCV-2.3.1-win-superpack.exe并遵循了这个官方安装指南.

在CMake(gui)我的源代码是:D:\ opencv和构建目标是:C:\ opencv.

我还将C:\ opencv\install\bin; C:\ opencv\bin添加到我系统的PATH变量中.

我想要的是使用MinGW的gcc/g ++编译器在我的Windows操作系统上编译openCV程序.

我已经尝试了各种gcc/g ++参数,我在互联网上找到这些参数,而且几天玩-I和-L选项,编译器永远无法找到openCV函数或结构.

我想编译的内容:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>

int main(int argc, char *argv[])
{
  // Nothing but create a window
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
  cvMoveWindow("mainWin", 100, 100);
  cvWaitKey(0);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

输入:

gcc test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin"
Run Code Online (Sandbox Code Playgroud)

输出:

...\ccK4MfHv.o:test.c:(.text+0xa0b): undefined reference to `cvFree_'
Run Code Online (Sandbox Code Playgroud)

或者使用g ++:

输入:

g++ test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin"
Run Code Online (Sandbox Code Playgroud)

输出:

...\ccXCTKa1.o:test.c:(.text+0x1e): undefined reference to `cvNamedWindow'
Run Code Online (Sandbox Code Playgroud)

旁注:尝试在VS2005中编译我得到了同样的错误.

感谢您的时间!

Anq*_*nqi 5

如果其他人需要解决这个问题,这里是我如何使用MinGW,MSYS和CMake在Windows 7 x64中编译发布的OpenCV/HighGUI示例代码:

  1. 使用MinGW/MSYS/CMake从源代码构建OpenCV.这是因为我无法在OpenCV-win-SuperPack中获得MinGW编译版本,以便在MinGW/MSYS/Windows 7 x64中正确链接.

    如需完整参考,以下是我编译OpenCV的方法:

    • 确保安装了最新的CMake(v2.6或更高版本)和MinGW(带有GCC,G ++和MSYS选项)
    • 如果你想要新的基于Qt的OpenCV HighGUI前端,你需要安装Qt 4(SDK).
    • 下载OpenCV源码/超级包2.2或更高版本(我使用的是OpenCV-2.3.1-win-superpack.exe)
    • 将内容解压缩到[OPENCV_SOURCE_DIR](我把它放在C:/ opencv中,所以应该有一个文件在C:/ opencv/README例如)
    • 在别处创建[OPENCV_BUILD_DIR]目录(我使用C:/ opencv/build/mingw)
    • 使用CMake-GUI工具,将源目录指定为[OPENCV_SOURCE_DIR],将构建目录指定为[OPENCV_BUILD_DIR],然后单击"配置".
    • 您可能希望/需要调整选项(例如,我勾选"Qt"和"Qt-OpenGL"条目,然后再次单击"配置",然后必须提供qmake可执行文件的路径)
    • 完成配置OpenCV后,单击"生成"
    • 在MSYS终端中,浏览到[OPENCV_BUILD_DIR],并运行"make"来构建代码(这可能需要一段时间)
    • 一旦正确构建,运行"make install",它将构建的代码/ libraries/include dirs收集到[OPENCV_BUILD_DIR]/install文件夹(如果在使用CMake-GUI工具时更改了相应的选项,则收集其他文件夹)
    • 将[OPENCV_BUILD_DIR]/install/bin文件夹添加到PATH环境变量中.如果您不知道如何执行此操作,那么我建议您使用路径编辑器GUI工具.
    • 如果你最终使用Qt,你还需要将Qt SDK的bin文件夹放在PATH环境变量中.这是包含qmake.exe的文件夹.
  2. 将以下示例代码放入名为test.c的文件中.我稍微修改了包含,使它们与OpenCV v2.2及更高版本兼容.

     #include <stdlib.h>
     #include <stdio.h>
     #include <math.h>
     #include <opencv/cv.h>
     #include <opencv/highgui.h>
    
     int main(int argc, char *argv[])
     {
       // Nothing but create a window
       cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
       cvMoveWindow("mainWin", 100, 100);
       cvWaitKey(0);
       return 0;
     } 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在MSYS终端中,浏览到放置test.c的文件夹,然后运行:

    gcc -o test -I"[OPENCV_BUILD_DIR]/install/include" test.c \
      -L"[OPENCV_BUILD_DIR]/install/lib" \
      -lopencv_core[OPENCV_VERSION] \
      -lopencv_imgproc[OPENCV_VERSION] \
      -lopencv_highgui[OPENCV_VERSION]
    
    Run Code Online (Sandbox Code Playgroud)

    所以在我的情况下:

    gcc -o test -I"/c/opencv/build/mingw/install/include" test.c \
      -L"/c/opencv/build/mingw/install/lib" \
      -lopencv_core231
      -lopencv_imgproc231
      -lopencv_highgui231
    
    Run Code Online (Sandbox Code Playgroud)

路径编辑器:http://www.redfernplace.com/software-projects/patheditor/


Mic*_*urr 0

您可以使用目录来在/命令行C:\opencv\install\bin上查找库,但我认为您还需要指定用作链接器输入的库。我不确定 OpenCV 发行版中包含哪些库,但根据您链接到的说明页面上的示例,其中一个可能是:gccg++

 -lopencv_calib3d220.dll
Run Code Online (Sandbox Code Playgroud)

您可能需要添加一个或多个其他目录(遵循目录lib*.a中的名称模式 - 或者您应该在选项中传递的C:\opencv\install\bin其他目录)。lib-L