我正在尝试用MSYS / MinGW构建OpenCV,所以我可以在python中使用cv2模块。 我使用64位Windows 7并使用32位Python 2.7。构建OpenCV可以工作,但是我似乎无法使用它而没有得到“ImportError:DLL加载失败:找不到指定的模块”。导入cv2后。我已经调试了一段时间,常见的谷歌解决方案似乎无法正常工作。
这些是我采取的步骤:
使用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
然后我复制
cv2.pyd和libcv2.dll.a
C:\ Program Files(x86)\ OpenCV \ lib
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加载失败:找不到指定的模块。'),
要调试这个我:
找不到LIBOPENCV_CALIB3D249.DLL和所有其他opencv库。但是,这些都与cv2.pyd以及PATH和PYTHONPATH位于同一目录中。
但它们被命名为.dll.a,因为我用MSYS / MinGW编译。我不明白为什么它在没有.a后缀的情况下寻找.dll。我想这可能与错误有关,但我不知道从哪里开始。
我还构建了一个小型C ++应用程序,它使用我构建的OpenCV进行读取和映像。它构建得很好,但我收到错误:程序无法启动,因为您的计算机缺少libopencv_core249.dll。所以,我更确信这个.dll.a就是问题。
我尝试过将.sll.a中的库重命名为.dll,但这不起作用。
我希望有人可以解释这个问题。
答案 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文件复制到相应的文件夹中。
最好的问候。