centos下安裝opencv

根據項目須要,安裝opencv並提供給開發使用,而且使用opencv提供python3的API接口。雖然不知道是個啥,仍是簡單瞭解下。html

opencv是什麼?

OpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫。OpenCV是由英特爾公司發起並參與開發,以BSD許可證受權發行,能夠在商業和研究領域中無償使用。OpenCV可用於開發實時的圖像處理、計算機視覺以及模式識別程序。該程序庫也能夠使用英特爾公司的IPP(收費庫)進行加速處理。java

環境信息:python

  • opencv-3.4.4 //3.x版本以上建議使用7系列來安裝,省掉超多升級步驟
  • opencv_contrib-3.4.4 //opencv3之後 SIFT 和 SURF 之類的屬性被移到了 contrib 中
  • centos7
  • gcc 4.8.x
  • cmake 2.8.x
  • pyenv //shell腳本編寫的python版本管理工具
  • pyenv-virtualenv //虛擬環境
  • python 3.x //使用opencv提供的python3的API接口

1、下載源碼包

2、安裝python環境

  1. 安裝pyenv
    注:pyenv和python環境安裝可參考:http://www.javashuo.com/article/p-agsroikw-gc.htmllinux

  2. 安裝依賴包
//安裝編譯包
~]# yum install -y cmake gcc gcc-c++  
//安裝圖形特性功能
]# yum install -y gtk* libdc1394-devel libv4l-devel ffmpeg-devel gstreamer-plugins-base-devel
//安裝圖片功能
]# yum install -y libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel

3、安裝python依賴庫

~]# pyenv virtualenv 3.4.1 opencv   //建立一個opencv別名的python3.4.1版本的環境
~]# pyenv activate opencv           //切換至虛擬opencv環境中
(opencv) ~]# pip install numpy==1.13.1    //根據項目須要選擇性安裝
(opencv) ~]# pip install dlib==19.9.0
(opencv) ~]# pip install scipy==0.18.0

4、編譯安裝opencv

在linux下安裝gtk-devel時會引入安裝python2的安裝,致使在使用cmake時會檢測到兩個python版本,而cmake會傾向於使用低版本的python2。c++

錯誤過程

(opencv) ~]# tar xf opencv-3.4.4.tar.gz -C /usr/local/pkg/
(opencv) ~]# tar xf opencv_contrib-3.4.4.tar.gz -C /usr/local/pkg/
(opencv) ~]# cd /usr/local/pkg/
(opencv) ~]# mkdir opencv-3.4.4/build    //建立build編譯目錄
(opencv) ~]# cd opencv-3.4.4/build
(opencv) ~]# cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/usr/local/pkg/opencv_contrib-3.4.4/modules ..
....
-- The CXX compiler identification is GNU 4.8.5
-- The C compiler identification is GNU 4.8.5
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Performing Test HAVE_CXX11 (check file: cmake/checks/cxx11.cpp)
-- Performing Test HAVE_CXX11 - Failed
**-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.5", minimum required is "2.7") 
-- Found PythonLibs: /lib64/libpython2.7.so (found suitable exact version "2.7.5")**    //這裏已經查找到相應的環境信息
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy.distutils
**-- Found PythonInterp: /usr/local/python/.pyenv/versions/3.4.1/bin/python (found suitable version "3.4.1", minimum required is "3.2") 
-- Could NOT find PythonLibs (missing:  PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) (Required is exact version "3.4.1")** 
//這裏沒有發現PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS環境信息。須要要在cmake時指定相應信息
....
--   OpenCL:                        YES (no extra features)
--     Include path:                /usr/local/pkg/opencv-3.4.4/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
**--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.5)
--     Libraries:                   /lib64/libpython2.7.so (ver 2.7.5)
--     numpy:                       /usr/lib64/python2.7/site-packages/numpy/core/include (ver 1.13.1)
--     packages path:               lib/python2.7/site-packages**
//這不是我想要的,需求是python3
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         /usr/lib/jvm/java/include /usr/lib/jvm/java/include/linux /usr/lib/jvm/java/include
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local


正確過程

...
(opencv) ~]# cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D INSTALL_PYTHON_EXAMPLES=ON \
**-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=OFF \**
-D PYTHON_EXECUTABLE=$(which python) \
-D PYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
-D OPENCV_EXTRA_MODULES_PATH=/usr/local/pkg/opencv_contrib-3.4.4/modules ..
...
--   OpenCL:                        YES (no extra features)
--     Include path:                /usr/local/python/opencv-3.4.4/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/local/python/.pyenv/shims/python3 (ver 3.4.1)
--     Libraries:                   /usr/local/python/.pyenv/versions/3.4.1/lib (ver 3.4.1)
--     numpy:                       /usr/local/python/.pyenv/versions/3.4.1/lib/python3.4/site-packages/numpy/core/include (ver 1.13.1)
--     packages path:               lib/python3.4/site-packages
-- 
--   Python (for build):            /usr/local/python/.pyenv/shims/python3
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         /usr/lib/jvm/java/include /usr/lib/jvm/java/include/linux /usr/lib/jvm/java/include
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/python/opencv-3.4.4/build
(opencv) ~]# make -j 8    //使用幾個CPU來運,越多速度越快
(opencv) ~]# make install 
....
-- Set runtime path of "/usr/local/python/cv2/python-3.4/cv2.cpython-34m.so" to "/usr/local/lib64"
...
//這時已經安裝好,而且生成了相應.so文件,咱們只需把庫文件拷貝到相應python版本的庫目錄下便可
(opencv) ~]# cp -a /usr/local/python/cv2/python-3.4/cv2.cpython-34m.so /usr/local/pkg/.pyenv/versions/3.4.1/lib/python3.4/cv2.so
(opencv) ~]#

6、測試

(opencv) ~]# python
>>> import cv2
>>> cv2.__version__
'3.4.4'

官方文檔:https://docs.opencv.org/3.4.4/dd/dd5/tutorial_py_setup_in_fedora.html#gsc.tab=0git

相關文章
相關標籤/搜索