Cmake 坑爹让我在Ubuntu14.04 安装opencv的python接口库搞了一整天

时间:2023-02-02 04:37:04

一、前几天在ubuntu14.04系统上通过源码安装了opencv3.1后,在python控制台输入

import cv2

提示找不到cv2库。我赶紧百度找了下原因,网上说执行这个命令就行

sudo apt-get install Python-OpenCv

执行了果然好了。

二、今天把程序往服务器上迁移,结果总是报错,错的很离谱

image, contours, hierarchy = cv2.findContours(img1,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)

这一句出错,说cv2.findContours返回的是2个返回值,不是3个。当时我就惊呆了好吗,我在本机上明明返回的是3个,挪到服务器上就返回2个了。奔溃。

赶紧看一下cv2的版本,调用

cv2.__version__

结果果然,服务器上的opencv是2.48版本,本机上的是3.1版本。也就是说服务器上的opencv3.1版本没有安装成功。

三、赶紧卸了Python-OpenCv库,开始老老实实安装OpenCv3.1

但是呢,不知为什么,OpenCv3.1源码编译后在输出文件夹就是不生成cv2.so文件。这个文件就是python引用的库文件,没有这个文件还怎么玩啊。

我开始看cmake的输出结果,果然,在命令行下cmake输出了

OpenCV modules:
--     To be built:                 core flann hdf imgproc ml photo reg surface_matching video dnn fuzzy imgcodecs shape videoio highgui objdetect plot superres ts xobjdetect xphoto bgsegm bioinspired dpm face features2d line_descriptor saliency text calib3d ccalib datasets rgbd stereo structured_light tracking videostab xfeatures2d ximgproc aruco optflow stitching
--     Disabled:                    world contrib_world
--     Disabled by dependency:      -
--     Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 python3 viz cvv matlab sfm


Python 2: -- Interpreter: /usr/bin/python2.7 (ver 2.7.6)

 

我对比了之前在其他服务器上配置的结果,应该是:

.........
OpenCV modules:
--     To be built:                 core flann hdf imgproc ml photo reg surface_matching video dnn fuzzy imgcodecs shape videoio highgui objdetect plot superres ts xobjdetect xphoto bgsegm bioinspired dpm face features2d line_descriptor saliency text calib3d ccalib datasets rgbd stereo structured_light tracking videostab xfeatures2d ximgproc aruco optflow stitching python2
--     Disabled:                    world contrib_world
--     Disabled by dependency:      -
--     Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python3 viz cvv matlab sfm
--
.........


Python 2: -- Interpreter: /usr/bin/python2.7 (ver 2.7.6) -- Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6) -- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.8.2) -- packages path: lib/python2.7/dist-packages

 

这就太显然了,cmake没有找到python的库啊。所以没有安装cv2的python接口文件。

四、配置cv2的python接口文件

首先,我把cmake从原来的2.8版本升级到了3.2版本,方法自行百度(事实上应该可以不用升级)

然后删除cmake的缓存文件,怎么删呢?就是删除cmake运行文件夹下的

CMakeCache.txt

然后从新cmake一下,everything goes smoothy!

当然需要重新编译:

sudo make -j4 -B

这时候,在lib文件夹下启动python console是可以import cv2的,但是其他文件夹下不行。然后执行

sudo make install

然后就ok了!搞了一天我屮艸芔茻。