本文最后更新于2020年03月12日;如遇问题,请留言及时通知站长。

【起因】

想了解一下图像识别处理方面的知识,然后需要安装OpenCV。

【初始】

因为之前电脑上已经安装了 anaconda(https://www.anaconda.com/)v1.9.12,
而且 anaconda 里面带有 Jupyter Lab 和 Jupyter Notebook ,它们是学习 Python 的好工具,
于是,计划在 Jupyter Lab 里面运行有关 OpenCV 相关代码。

anaconda 里面利用关键字“opencv”,可以查找到“libopencv、opencv、py-opencv”三个包,可是不知道什么原因就是安装不了,一只停留在 solving environment 那里转圈圈,切换成清华的镜像源(https://mirror.tuna.tsinghua.edu.cn/help/anaconda/)也不行,只能手动安装了。

【 conda 大法好】

安装完 Anaconda 后,如果终端窗口 conda 命令不能运行,可以先配置 .zshrc 文件;

打开终端,输入 vi ~/.zshrc 之后回车,然后按字母 i 进入插入编辑模式,输入下列代码 export PATH=/opt/anaconda3/bin:$PATH ,其中红色字体要替换成你自己电脑上的 conda 所在目录,按 ESC 键,输入 :wq 三个字符,文件被保存后退出。终端再输入 source ~/.zshrc ,使其立即生效,这时就可以用 conda --version ,查看 conda 的版本信息。

第一步:conda config --setshow_channel_urls yes ,这是为了查看更新源
第二步:conda update --all ,更新所有包,由于网络原因,几百KB的文件更新很快,一旦十几上百兆的文件往往会更新失败,没关系,可以把这个命令多运行几遍,有时候就可以更新完毕了。

或者如下面的图片中,scikit-image 更新的时候总是失败,得另辟蹊径.

截屏2020-03-11下午3.13.51.png

截屏2020-03-11下午3.13.17.png

把 scikit-image 更新的版本号记录下来:scikit-image-0.16.2-py37h6c726b0_0 ,打开 https://anaconda.org/ , 输入 scikit-image 查找,选择 anaconda 开头的版本,点击进去,切换到 Files 页面,通过增加 Filters:0.16.2,然后对照上面的版本号,可以找到相应的文件,点击下载即可。

anaconda scikit-image

把下载之后的 scikit-image-0.16.2-py37h6c726b0_0.tar.bz2 文件放到 anaconda 下面 pkgs 文件夹里面,然后运行:
conda install --use-local scikit-image-0.16.2-py37h6c726b0_0.tar.bz2
即可完成本地安装。

同样的本地安装方法也可以用在 libopencv、opencv 和 py-opencv 上面,只是注意对应的版本号,我更新的是 对应 python 3.7 的 3.4.2 版本的 opencv 系列。

【 Jupyter Lab 好闹心】

第一次的时候,因为 anaconda 里面安装不了opencv三文件,于是用 sudo pip3 install opencv-python 和 open-contrib-python,安装好之后,在 Jupyter Lab 里面可以 import cv2 ,可以 cv2.imread(),但是 cv2.imshow(),内核就直接崩溃crash and died,倒是可以用 matlibplot 的 plt.imshow() 来解决。

但是,问题没有查清楚。于是,卸载掉 anaconda ,删除相关文件,重新做一遍,这一次没有用 pip 安装,而是按照上面的本地安装方法安装了 opencv 三文件,安装完毕之后, anaconda 里面可以查看到。

anaconda pkgs

这一次,cv2.imshow()可以使用了,弹出图片框,嗯,这个问题解决了。

新的问题又出现了, cv2.waitKey(0) 之后的 cv2.destroyAllWindows()不起作用,按任意键图片,图片框显示出来之后纹丝不动,之后有帖子说在最后加上 4 个 cv2.waitKey(0),有作用,果然一按键(鼠标点击没用的)图片框就不见了。

但是,图片框只是隐藏起来,在任务栏Dock上还是可以看到,也即是说这个弹出来的图片框并没有被摧毁(而且在最后只增加一个 waitKey 就可以了)。
搜索并尝试了许久,未果.............
我在想:可能弹出来的图片框不归 Jupyter Lab 管理了吧,想要关闭,得获取窗口句柄,然后再 close 吧,以后再折腾。又反过来想,这样弹出图片框,其实不如用 matlibplot 直接内嵌显示方便呢。

【PyCharm 最终版】

好吧,既然 Jupyter Lab 不行,那换个工具吧。
下载 PyCharm Community版:https://www.jetbrains.com/pycharm/download/ ,网站需要多试几次才能进去,原因不明。
安装完毕,create new project,在 解释器里面选择 conda 环境。

进入到项目之后,通过 File 菜单里面的 Preference... 选择 项目解释器,可以看到里面没有 opencv 三剑客包,没关系,点击下面的加号➕,在弹出界面输入 opencv 查找,然后安装三个文件即可,安装之后 PyCharm 需要一两分钟来更新项目环境。

PyCharm

编写代码:

import cv2
img = cv2.imread("/Users/john/Desktop/lena.png")
cv2.imshow("myLena",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

It's OK,my Lena。

lena.png