OpenCV近几年功能不断增强,目标检测、跟踪等方面出现了不少新算法。自3.3版开始,火热的深度神经网络的功能也加入其中。早期的OpenCV仅支持简单的视频播放功能,现在ffmpeg的部分功能也融入进来。为了验证新功能的效果,准备在Python下跑几个程序看看效果。不过,配置的过程还是有点小麻烦的。
首先打开 Anaconda Prompt输入
pip install opencv-python
然后,Anaconda会自动安装python-3.4.0.12-cp35-cp35m-win_amd64.whl并提示成功安装。
这时,打开Spyder新建文件cvtest.py并输入

import cv2 as cv   
#读入图片文件  
src=cv.imread('text.jpg')  
#创建一个名字加 “ input image ” 的窗口,  
# 窗口可以根据图片大小自动调整  
cv.namedWindow('input image',cv.WINDOW_AUTOSIZE)  
#在窗口显示图片  
cv.imshow('input image',src)    
#等待用户操作  
cv.waitKey(0)  
#释放所有窗口  
cv.destroyAllWindows()

运行该程序时,提示如下错误:

ImportError: DLL load failed: 找不到指定的模块。

为寻找原因,打开pypi网站,搜索openCV-python包,打开其主页。在回答的问题中有关于该问题的描述:

Q: Import fails on Windows to some DLL load error?
A: If the import fails on Windows, make sure you have Visual C++ redistributable 2015 installed. If you are using older Windows version than Windows 10 and latest system updates are not installed, Universal C Runtime might be also required.

也就是说要安装Visual C++ redistributable 2015,但下载后无法安装,提示已安装相关的包,如下图所示。

于是在Anaconda 中开始查找库文件,结果只在Anaconda3\Lib\site-packages\cv2\build下找到了opencv_ffmpeg340_64.dll文件,没有其它dll文件或OpenCV提供给Python用的pyd文件。说明pip的安装有问题。
经百度,有人说Anaconda3\Lib\site-packages\ 目录下有一些opencv开头的dll文件,将其复制至cv2文件夹下即可,但我安装的是opencv3.4,安装后并没有这些文件。还有人说是pip安装时选择的OpenCV版本有问题。他解决了Python下安装OpenCV3.2的问题。于是我们也打开该网页,找到我们需要的版本(64位,已上传至本网站),即opencv_python‑3.4.1+contrib‑cp35‑cp35m‑win_amd64.whlopencv_python‑3.4.1‑cp35‑cp35m‑win_amd64.whl并下载,比如下载至f:\tools,然后打开CMD切换至该目录,并运行pip命令安装:

pip install opencv_python‑3.4.1+contrib‑cp35‑cp35m‑win_amd64.whl
或pip install opencv_python‑3.4.1‑cp35‑cp35m‑win_amd64.whl

如果使用的不是Anaconda需要先安装wheel。安装完毕后再次运行cvtest.py不再提示ImportError。
附:dll文件中函数查看方法:

  1. 使用vc++ 6.0的dependency查看;
  2. 使用Visual Studio 2010的IL反汇编程序查看;
  3. 打开Visual Studio 2010命令行程序,输入
    dumpbin /exports H:\opencv3.4\build\bin\opencv_ffmpeg340_64.dll

    这里的动态库文件名可以输入全路径,也可以直接将dll文件拖放至该命令行窗口。输出结果如下:
    上述三种工具在安装了Visual c++ 6.0或Vsiual Studio 2010后,可以在开始菜单中找到。若没有安装,可以搜索下载相关的dll函数查看工具,安装后可以查看。