1

我正在尝试使用 MSYS / MinGW 构建 OpenCV,以便可以在 python 中使用 cv2 模块。我在 Windows 7 64 位并使用 32 位 Python 2.7。构建 OpenCV 可以工作,但如果没有收到“ImportError:DLL 加载失败:找不到指定的模块”,我似乎无法使用它。导入 cv2 后。调试了一段时间,google常见的解决方案好像不行。

这些是我采取的步骤:

  • 从我的计算机中删除了所有其他 opencv 实例(有一些)
  • 用 CMake 构建了 opencv,我手动设置了这些标志:

             'CMAKE_INSTALL_PREFIX'       : 'C:/Program Files (x86)/OpenCV'
             'CMAKE_BUILD_TYPE'           : 'Release',
             'CMAKE_C_FLAGS'              : '-m32',
             'CMAKE_CXX_FLAGS'            : '-m32',
             'BUILD_opencv_gpu'           : False,
             'BUILD_opencv_gpuarithm'     : False,
             'BUILD_opencv_gpubgsegm'     : False,
             'BUILD_opencv_gpucodec'      : False,
             'BUILD_opencv_gpufeatures2d' : False,
             'BUILD_opencv_gpufilters'    : False,
             'BUILD_opencv_gpuimgproc'    : False,
             'BUILD_opencv_gpuoptflow'    : False,
             'BUILD_opencv_gpustereo'     : False,
             'BUILD_opencv_gpuwarping'    : False
    
  • 我做了一个 cmake -G "MSYS Makefiles" ...,make -j9,最后是 make install。打印输出显示图书馆去我期望的地方。

  • 我的路径包括

             C:\MinGW\bin
             C:\MinGW\msys\1.0\bin
             C:\MinGW\libexec\gcc\mingw32\4.6.2
             C:\Python27\
             C:\Python27\Scripts
             C:\Program Files (x86)\OpenCV
             C:\Program Files (x86)\OpenCV\lib
    
  • 我的 PYTHONPATH 包括

             C:\Python27\Lib\site-packages
             C:\Python27
    
  • 然后我复制

    • C:\Python\Lib\site-packages 中的 cv2.pyd 和 libcv2.dll.a

    • 所有 libopencv_*249.dll.a 来自 C:\Program Files (x86)\OpenCV\lib

    • libgcc_s_dw2-1.dll libstdc++-6.dll 来自 C:\MinGW\bin

    • 我将所有这些移动到我命名为 cv2 的目录中

  • 在 cv2 目录中,我创建了一个 __init__.py 文件,其中包含以下代码:

         import os, sys
         from os.path import realpath, dirname
         tpl_cv2 = realpath(dirname(__file__))
         print(tpl_cv2)
         sys.path.insert(0,tpl_cv2)
         os.environ['PATH'] = tpl_cv2 + os.pathsep + os.environ['PATH']
         try:
             from cv2 import *
         except Exception as ex:                       
             print(repr(ex))
             print(os.environ['PATH'])
             print(sys.path)
             raise
    
  • 然后我打开一个 IPython 终端并输入命令“import cv2”

我得到错误: ImportError('DLL load failed: The specified module could not be found.',)


要调试这个我有:

  • 我在depends.exe中加载了cv2.pyd文件它表明

未找到 LIBOPENCV_CALIB3D249.DLL 和所有其他 opencv 库。但是,这些都与 cv2.pyd 以及 PATH 和 PYTHONPATH 位于同一目录中。

但是它们被命名为 .dll.a 因为我是用 MSYS / MinGW 编译的。我不明白为什么要寻找没有 .a 后缀的 .dll 。我认为这可能与错误有关,但我不知道从哪里开始。

  • 我还构建了一个小型 C++ 应用程序,它使用我构建的 OpenCV 读取和成像。它构建得很好,但我收到错误:程序无法启动,因为您的计算机缺少 libopencv_core249.dll。所以,我更相信这个 .dll.a 是问题所在。

  • 我试过简单地将库从 .dll.a 重命名为 .dll,但这没有用。

我希望有人可以阐明这个问题。

4

3 回答 3

2

我真的觉得自己很傻。dll 位于“C:\Program Files (x86)\bin”而不是“C:\Program Files (x86)\lib”现在似乎可以工作了。

于 2013-07-10T21:52:13.937 回答
1

这篇文章对我帮助很大。我找到的答案是确保编译的 bin 文件是我的 PATH 变量的一部分。

我的 CMAKE_INSTALL_PREFIX 是 C:\opencv\src\build\install 并将 C:\opencv\src\build\install\x86\vc11\bin 添加到我的 PATH 变量中使 cv2 开始工作。

于 2015-09-20T03:30:30.367 回答
0

只是为了确保其他用户可以得到这个答案的帮助:

想象一下,你已经编译了 OpenCV 并且有几个 *.dll 和 cv2.pyd 文件。

您需要将这些文件复制到 python 目录中的“DLLs”文件夹中。

然后导入模块检查是否正常。我还将 *.lib 文件复制到相应的文件夹中。

此致。

于 2014-07-17T11:56:46.043 回答