用mingw构建opencv。导入cv2时失败。 DLL加载失败。寻找.dll,但我有.dll.a的

时间:2013-07-10 21:43:08

标签: python opencv mingw

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

这些是我采取的步骤:

  • 从我的电脑中删除了所有其他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

    • C:\ Program Files(x86)\ OpenCV \ lib

    • 中的所有libopencv_ * 249.dll.a
    • libgcc_s_dw2-1.dll libstdc ++ - 来自C:\ MinGW \ bin的6.dll

    • 我把所有这些都移到了一个名为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加载失败:找不到指定的模块。'),


要调试这个我:

  • 我在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就是问题。

  • 我尝试过将.sll.a中的库重命名为.dll,但这不起作用。

我希望有人可以解释这个问题。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

您需要将这些文件复制到' DLL' python目录中的文件夹。

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

最好的问候。