首先说明一点,在Ubuntu环境下编译opencv后python和C++都是可以使用的。
编译opencv
Ubuntu16.04 自带python2.7和python3.5两个版本,默认为python2.7,我使用的是3.5,所以首先将默认的python版本改为3.5.
在终端输入下列指令:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
接下来安装一系列opencv依赖的文件:
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3.5-dev
sudo apt-get install python3-numpy
接着在opencv的官网下载opencv文件,下载完成后解压通过终端进入解压的文件夹,新建build文件夹,并进入:
mkdir build
cd ./biuld
接着执行:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.5 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.5/dist-packages/numpy/core/include/ ..
开始make:
make -j4
make完成后开始安装:
sudo make install
接着
pip3 install opencv-python
最后进入python3.5环境import cv2没问题说明安装完成。
------------------------------------------------------------------------------
接下来讲下卸载的流程:
首先通过终端进入之前建立的build文件夹,接着开始卸载:
sudo make uninstall
接着删除一些文件:
cd ../
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
有些文件可能提示没有,可以忽略。
最后删除一些依赖:
sudo apt-get remove opencv-doc opencv-data python-opencv
---------------------
配置C++下opencv的环境
简单说下ubuntu下安装qtcreator以及配置opencv的步骤:
(1)点击链接下载你所需要的qtcreator版本
(2)进入下载安装包所在文件夹打开终端,添加权限进行安装
chmod +x qt-opensource-linux-x64-5.6.3.run
./qt-opensource-linux-x64-5.6.3.run
(3)在图形安装界面中进行安装程序
(4)安装完后建立一个新项目选择Non-Qt-Project —> C++Project
(5)在自动生成的.pro文件中加入以下头文件
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
(6)打开/usr/local/lib文件夹将所有的libopencv库文件添加到.pro文件中,可在终端中输入“ls”指令方便查看:
添加后保存.pro文件:
列出我编译出的所有库文件:
LIBS += /usr/local/lib/libopencv_calib3d.so \
/usr/local/lib/libopencv_highgui.so.3.4.0 \
/usr/local/lib/libopencv_calib3d.so.3.4 \
/usr/local/lib/libopencv_imgcodecs.so \
/usr/local/lib/libopencv_calib3d.so.3.4.0 \
/usr/local/lib/libopencv_imgcodecs.so.3.4 \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgcodecs.so.3.4.0 \
/usr/local/lib/libopencv_core.so.3.4 \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_core.so.3.4.0 \
/usr/local/lib/libopencv_imgproc.so.3.4 \
/usr/local/lib/libopencv_cudaarithm.so \
/usr/local/lib/libopencv_imgproc.so.3.4.0 \
/usr/local/lib/libopencv_cudaarithm.so.3.4 \
/usr/local/lib/libopencv_ml.so \
/usr/local/lib/libopencv_cudaarithm.so.3.4.0 \
/usr/local/lib/libopencv_ml.so.3.4 \
/usr/local/lib/libopencv_cudabgsegm.so \
/usr/local/lib/libopencv_ml.so.3.4.0 \
/usr/local/lib/libopencv_cudabgsegm.so.3.4 \
/usr/local/lib/libopencv_objdetect.so \
/usr/local/lib/libopencv_cudabgsegm.so.3.4.0 \
/usr/local/lib/libopencv_objdetect.so.3.4 \
/usr/local/lib/libopencv_cudacodec.so \
/usr/local/lib/libopencv_objdetect.so.3.4.0 \
/usr/local/lib/libopencv_cudacodec.so.3.4 \
/usr/local/lib/libopencv_photo.so \
/usr/local/lib/libopencv_cudacodec.so.3.4.0 \
/usr/local/lib/libopencv_photo.so.3.4 \
/usr/local/lib/libopencv_cudafeatures2d.so \
/usr/local/lib/libopencv_photo.so.3.4.0 \
/usr/local/lib/libopencv_cudafeatures2d.so.3.4 \
/usr/local/lib/libopencv_shape.so \
/usr/local/lib/libopencv_cudafeatures2d.so.3.4.0 \
/usr/local/lib/libopencv_shape.so.3.4 \
/usr/local/lib/libopencv_cudafilters.so \
/usr/local/lib/libopencv_shape.so.3.4.0 \
/usr/local/lib/libopencv_cudafilters.so.3.4 \
/usr/local/lib/libopencv_stitching.so \
/usr/local/lib/libopencv_cudafilters.so.3.4.0 \
/usr/local/lib/libopencv_stitching.so.3.4 \
/usr/local/lib/libopencv_cudaimgproc.so \
/usr/local/lib/libopencv_stitching.so.3.4.0 \
/usr/local/lib/libopencv_cudaimgproc.so.3.4 \
/usr/local/lib/libopencv_superres.so \
/usr/local/lib/libopencv_cudaimgproc.so.3.4.0 \
/usr/local/lib/libopencv_superres.so.3.4 \
/usr/local/lib/libopencv_cudalegacy.so \
/usr/local/lib/libopencv_superres.so.3.4.0 \
/usr/local/lib/libopencv_cudalegacy.so.3.4 \
/usr/local/lib/libopencv_videoio.so \
/usr/local/lib/libopencv_cudalegacy.so.3.4.0 \
/usr/local/lib/libopencv_videoio.so.3.4 \
/usr/local/lib/libopencv_cudaobjdetect.so \
/usr/local/lib/libopencv_videoio.so.3.4.0 \
/usr/local/lib/libopencv_cudaobjdetect.so.3.4 \
/usr/local/lib/libopencv_video.so \
/usr/local/lib/libopencv_cudaobjdetect.so.3.4.0 \
/usr/local/lib/libopencv_video.so.3.4 \
/usr/local/lib/libopencv_cudaoptflow.so \
/usr/local/lib/libopencv_video.so.3.4.0 \
/usr/local/lib/libopencv_cudaoptflow.so.3.4 \
/usr/local/lib/libopencv_videostab.so \
/usr/local/lib/libopencv_cudaoptflow.so.3.4.0 \
/usr/local/lib/libopencv_videostab.so.3.4 \
/usr/local/lib/libopencv_cudastereo.so \
/usr/local/lib/libopencv_videostab.so.3.4.0 \
/usr/local/lib/libopencv_cudastereo.so.3.4 \
/usr/local/lib/libopencv_cudastereo.so.3.4.0 \
/usr/local/lib/libopencv_cudawarping.so \
/usr/local/lib/libopencv_cudawarping.so.3.4 \
/usr/local/lib/libopencv_cudawarping.so.3.4.0 \
/usr/local/lib/libopencv_cudev.so \
/usr/local/lib/libopencv_cudev.so.3.4 \
/usr/local/lib/libopencv_cudev.so.3.4.0 \
/usr/local/lib/libopencv_dnn.so \
/usr/local/lib/libopencv_dnn.so.3.4 \
/usr/local/lib/libopencv_dnn.so.3.4.0 \
/usr/local/lib/libopencv_features2d.so \
/usr/local/lib/libopencv_features2d.so.3.4 \
/usr/local/lib/libopencv_features2d.so.3.4.0 \
/usr/local/lib/libopencv_flann.so \
/usr/local/lib/libopencv_flann.so.3.4 \
/usr/local/lib/libopencv_flann.so.3.4.0 \
/usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_highgui.so.3.4
最后在你的main.cpp文件中读取一张图片试试:
#include <iostream>
#include <opencv2/opencv.hpp>
#include "cv.h"
#include "highgui.h"
using namespace std;
using namespace cv;
int main()
{
Mat image;
image = imread("/home/wz/qt_C++_Pro/test/1.jpg");
imshow("1", image);
waitKey(0);
return 0;
}