ubuntu16.04下opencv2和opencv3共存

OpenCV二系和三系不是簡單地三系就比二系新,比二系好的關(guān)系,兩個(gè)版本主要是接口不同,而兩個(gè)版本都在維護(hù)更新。同時(shí)安裝兩個(gè)版本在使用時(shí)需要在CmakeLists.txt中調(diào)用時(shí)需要進(jìn)行區(qū)分。

查看opencv版本
pkg-config --modversion opencv

下載安裝包, unzip解壓, 先安裝依賴項(xiàng), 依賴項(xiàng)可參考(https://blog.csdn.net/xbs150/article/details/77840786)
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff5-dev libopenexr-dev libtbb-dev libgstreamer-plugins-base1.0-dev libjasper-dev

上github/opencv下安裝包, 和第三方庫
在解壓后的安裝包下mkdir build && cd build
創(chuàng)建目標(biāo)安裝文件夾sudo mkdir /usr/local/bin/opencv-2.4.13.6

cmake并避免掉CUDA影響
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_CUBLAS=0 -D WITH_CUDA=0 -D WITH_CUFFT=0 -D CMAKE_CXX_STANDARD=11 -D CMAKE_INSTALL_PREFIX=/usr/local/bin/opencv-3.4.10 ..
-D WITH_TBB=ON -D WITH_V4L=ON
或者支持CUDA的代碼
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_CUBLAS=1 -D WITH_CUDA=ON -D WITH_CUFFT=1 -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_X11=ON -D WITH_GSTREAMER=ON -D WITH_IPP=OFF -D BUILD_opencv_cudalegacy=OFF -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 -D CUDNN_LIBRARY=/usr/local/cuda-9.0/lib64 -D CUDNN_INCLUDE_DIR=/usr/local/cuda-9.0/include -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.5/modules -D CMAKE_INSTALL_PREFIX=/usr/local/bin/opencv-3.4.5 ..

也可指定python版本并添加很多安裝項(xiàng)(未知意義)

cmake -D CMAKE_BUILD_TYPE=RELEASE -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D BUILD_EXAMPLES=ON -D WITH_FFMPEG=ON -D WITH_LIBV4L=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D WITH_OPENCL=ON -D WITH_OPENMP=ON -D WITH_ZLIB=ON -D BUILD_PNG=ON -D BUILD_JPEG=ON -D BUILD_TIFF=ON -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_LAPACK=OFF -D CMAKE_INSTALL_PREFIX=/usr/local/bin/opencv-3.4.6 -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D PYTHON3_EXECUTABLE=$(which python) -DPYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..

若缺少gstreamer參考(https://answers.opencv.org/question/95734/cmake-not-picking-gstreamer-on-ubuntu/)
其余可參考(https://www.cnblogs.com/yuanlibin/p/7735274.html)
(http://www.zsxrpd.com/blog/?p=671)(https://blog.csdn.net/djstavaV/article/details/86884165)

-j4代表開4個(gè)線程, 加快速度
sudo make -j4
sudo make install
還需要修改環(huán)境變量
vim ~/.bashrc
在后面追加
export PKG_CONFIG_PATH=/usr/local/bin/opencv-2.4.13.6/lib/pkgconfig${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=/usr/local/bin/opencv-2.4.13.6/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
這時(shí)使用命令已變成2.4
pkg-config --modversion opencv

首先把對應(yīng)的路徑弄清楚了,然后在CMakeList.txt才可以進(jìn)行對應(yīng)的設(shè)定

set(OpenCV_DIR /usr/local/bin/opencv-3.4.5/share/OpenCV)
find_package(OpenCV 3.4 REQUIRED)
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/bin/opencv-3.4.5/include)
link_directories(${OpenCV_LIBRARY_DIRS} /usr/local/bin/opencv-3.4.5/lib))

當(dāng)你想返回使用默認(rèn)的opencv2時(shí),將find_package(OpenCV 3.4 REQUIRED )換成find_package(OpenCV REQUIRED )即可,并將該代碼上面一行和下面?zhèn)z行注釋即可。

缺少.so庫

缺少.so庫時(shí)使用ldd main查看缺哪些庫, locate對應(yīng)的庫名, 然后vim /etc/ld.so.conf.d/opencv.conf, 在里面添加庫的路徑(/lib), 之后sudo ldconfig
對于編譯不成功的可能是庫找的不對, 使用如下命令即可

g++ -o test_1 test_1.cpp `pkg-config opencv --cflags --libs`

簡便方法(不推薦使用)

使用pip安裝opencv3 (pip無opencv2)
pip install opencv-python==3.4.5.20
使用apt-get安裝opencv2:

  • 在Ubuntu14.04和16.04下一般運(yùn)行
    sudo apt-get install libopencv-dev
    安裝2.4系列OpenCV,然后在官網(wǎng)下載安裝三系OpenCV。
  • 而在Ubuntu18.04中 sudo apt-get install libopencv-dev 安裝的OpenCV版本為3.2,還是有一些區(qū)別的。

使用apt-get安裝opencv2對應(yīng)的庫lib在 /usr/lib/x86_64-linux-gnu/,頭文件include在/usr/include/opencv和/usr/local/include/opencv2中, 需對應(yīng)的在CMakeList.txt中修改.

pip輸出環(huán)境包需求到requirements.txt

pip freeze | grep -v "pkg-resources" > requirements.txt

opencv2.x和opencv3.x的區(qū)別

  1. cv.CV_RGB2LAB變COLOR_RGB2Lab
import cv2 as cv
cv.cv.CV_RGB2Lab   # opencv2
cv.COLOR_RGB2Lab     # opencv3
  1. cv2.cvBoxPoints變cv2.boxPoints
box = np.array(cv2.cv.BoxPoints(rect))  # opencv2
box = np.array(cv2.boxPoints(rect))       # opencv3
  1. cv2.cv.CV_RETR_CCOMP變cv2.RETR_CCOMP
mode=cv2.cv.CV_RETR_CCOMP,   # opencv2
mode=cv2.RETR_CCOMP,            # opencv3
  1. cv2.cv.CV_CHAIN_APPROX_SIMPLE變cv2.CHAIN_APPROX_SIMPLE
method=cv2.cv.CV_CHAIN_APPROX_SIMPLE   # opencv2
method=cv2.CHAIN_APPROX_SIMPLE            # opencv3

cv2擴(kuò)展庫是針對OpenCV 2.x API創(chuàng)建的,直接采用NumPy的數(shù)組對象表示圖像,和pyopencv相比,不再需要在數(shù)組和Mat對象之間相互轉(zhuǎn)換了。

cv2的函數(shù)直接對Numpy數(shù)組進(jìn)行操作,
cv2讀取圖像是數(shù)組,array = cv2.imread()
(1)cv讀取圖像:
iplimage = cv.LoadImage()
<type 'cv2.cv.iplimage'>
<iplimage(nChannels=3 width=1212 height=824 widthStep=3636 )>
cvmat = cv.LoadImageM()
<type 'cv2.cv.cvmat'>
<cvmat(type=42424010 8UC3 rows=824 cols=1212 step=3636 )>
(2)array, iplimage, cvmat 轉(zhuǎn)換
array------> cvmat: cv.fromarray(array)
cvmat------> array: np.asarray(cvamt)
cvmat------> iplimage: cv.GetImage(cvmat)
iplimage----> cvmat: iplimage[:], 或 cv.GetMat(iplimage)

加速圖片decode

  1. 可以使用jpeg4py庫, 內(nèi)部封裝了libjpeg-turbo
  2. 手動(dòng)編譯opencv, 替換libjpeg庫為libjpeg-turbo
  3. 編譯支持CUDA的opencv, 使用cuda去做圖片處理
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容