主要介绍ubuntu 18.04安装OpenCV 4.2.0
更新系统
1
2
|
$ sudo apt update
$ sudo apt upgrade
|
安装前置依赖包
1
2
|
$ sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall
|
1
|
$ sudo apt install libjpeg-dev libpng-dev libtiff-dev
|
- 视频/音频库-FFMPEG,GSTREAMER,x264等等
1
2
3
4
|
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev
$ sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev
|
1
2
|
$ sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev
|
1
2
3
4
|
$ sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
$ cd /usr/include/linux
$ sudo ln -s -f ../libv4l1-videodev.h videodev.h
$ cd ~
|
1
|
$ sudo apt-get install libgtk-3-dev
|
1
2
3
|
$ sudo apt-get install python3-dev python3-pip
$ sudo -H pip3 install -U pip numpy
$ sudo apt install python3-testresources
|
1
|
$ sudo apt-get install libtbb-dev
|
1
|
sudo apt-get install libatlas-base-dev gfortran
|
1
2
3
|
$ sudo apt-get install libprotobuf-dev protobuf-compiler
$ sudo apt-get install libgoogle-glog-dev libgflags-dev
$ sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
|
正式安装Opencv 4.2.0步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
$ cd ~
$ mkdir -p installcv1
$ cd installcv1
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.1.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.1.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip
$ echo "Create a virtual environtment for the python binding module"
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
$ echo "Edit ~/.bashrc"
$ export WORKON_HOME=$HOME/.virtualenvs
$ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
$ source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv cv -p python3
$ pip install numpy
$ echo "Procced with the installation"
$ cd opencv-4.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_C_COMPILER=/usr/bin/gcc
-D CMAKE_INSTALL_PREFIX=/home/{youraccount}/opencv
-D INSTALL_PYTHON_EXAMPLES=ON
-D INSTALL_C_EXAMPLES=OFF
-D WITH_TBB=ON
-D WITH_CUDA=ON
-D BUILD_opencv_cudacodec=OFF
-D ENABLE_FAST_MATH=1
-D CUDA_FAST_MATH=1
-D WITH_CUBLAS=1
-D WITH_V4L=ON
-D WITH_QT=OFF
-D WITH_OPENGL=ON
-D WITH_GSTREAMER=ON
-D OPENCV_GENERATE_PKGCONFIG=ON
-D OPENCV_PC_FILE_NAME=opencv.pc
-D OPENCV_ENABLE_NONFREE=ON
-D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages
-D OPENCV_EXTRA_MODULES_PATH=~/installcv/opencv_contrib-4.2.0/modules
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python
-D BUILD_EXAMPLES=ON -D WITH_CUDNN=ON
-D OPENCV_DNN_CUDA=ON
-D CUDA_ARCH_BIN=6.1
-D WITH_INF_ENGINE=ON
-D ENABLE_CXX11=ON
-D INTEL_CVSDK_DIR=/home/sn0w/intel/openvino_2020.1.023/deployment_tools
-D IE_PLUGINS_PATH=/home/sn0w/intel/openvino_2020.1.023/deployment_tools/inference_engine/lib/intel64/
-D INF_ENGINE_RELEASE=2020010000
-D OPENCV_GENERATE_PKGCONFIG=ON
-D BUILD_EXAMPLES=ON ..
|
如果你只是想编译静态库,只需要在Cmake时附加 -D BUILD_SHARED_LIBS=OFF
1
2
|
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages -D OPENCV_EXTRA_MODULES_PATH=~/installcv/opencv_contrib-4.2.0/modules -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python -D BUILD_EXAMPLES=ON -D BUILD_SHARED_LIBS=OFF ..
|
如果你不想包括CUDA,只需要设置-D WITH_CUDA=OFF
1
2
|
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-6 -D CMAKE_INSTALL_PREFIX=/home/{youraccount}/opencv -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D WITH_TBB=ON -D WITH_CUDA=OFF -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.6/site-packages -D OPENCV_EXTRA_MODULES_PATH=~/installcv1/opencv_contrib-4.2.0/modules -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python -D BUILD_EXAMPLES=ON ..
|
如果你想使用CUDNN,你必须在Cmake时包含这些标记(正确的设置CUDA_ARCH_BIN的值)
1
2
3
|
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=6.1 \
|
在https://developer.nvidia.com/cuda-gpus网站上可以看到自己网卡可兼容的CUDA版本情况.
正式编译前,你必须检查CUDA在Cmake输出时是否启用
1
2
3
|
-- NVIDIA CUDA: YES (ver 10.0, CUFFT CUBLAS NVCUVID FAST_MATH)
-- NVIDIA GPU arch: 30 35 37 50 52 60 61 70 75
-- NVIDIA PTX archs:
|
正式编译和安装
1
2
3
|
$ nproc
$ make -j8 #!ubuntu 18.04编译过程中出现错误:sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
$ sudo make install
|
配置环境变量
1
2
3
|
$ sudo /bin/bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig
$
|
如果你想让python的cv包能够在系统环境下使用,必须要下面的复制工作
1
2
3
4
5
6
7
8
9
10
11
12
|
$ sudo cp -r ~/.virtualenvs/cv/lib/python3.6/site-packages/cv2 /usr/local/lib/python3.6/dist-packages
$ export LD_LIBRARY_PATH=/home/{youraccount}/ev_sdk/lib:/home/{youraccount}/opencv/lib:/usr/local/lib:/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ export OpenCV_DIR=/home/{youraccount}/opencv
$ echo "Modify config-3.6.py to point to the target directory"
$ sudo nano /usr/local/lib/python3.6/dist-packages/cv2/config-3.6.py
```
PYTHON_EXTENSIONS_PATHS = [
os.path.join('/usr/local/lib/python3.6/dist-packages/cv2', 'python-3.6')
] + PYTHON_EXTENSIONS_PATHS
```
|
测试安装
案例程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
//test.cpp
#include <iostream>
#include <ctime>
#include <cmath>
#include "bits/time.h"
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaimgproc.hpp>
#define TestCUDA true
int main() {
std::clock_t begin = std::clock();
try {
cv::String filename = "/home/raul/Pictures/Screenshot_20170317_105454.png";
cv::Mat srcHost = cv::imread(filename, cv::IMREAD_GRAYSCALE);
for(int i=0; i<1000; i++) {
if(TestCUDA) {
cv::cuda::GpuMat dst, src;
src.upload(srcHost);
//cv::cuda::threshold(src,dst,128.0,255.0, CV_THRESH_BINARY);
cv::cuda::bilateralFilter(src,dst,3,1,1);
cv::Mat resultHost;
dst.download(resultHost);
} else {
cv::Mat dst;
cv::bilateralFilter(srcHost,dst,3,1,1);
}
}
//cv::imshow("Result",resultHost);
//cv::waitKey();
} catch(const cv::Exception& ex) {
std::cout << "Error: " << ex.what() << std::endl;
}
std::clock_t end = std::clock();
std::cout << double(end-begin) / CLOCKS_PER_SEC << std::endl;
}
|
编译和执行
1
2
|
$ g++ -o test test.cpp `pkg-config opencv --cflags --libs`
$ ./test
|
FAQ
编译过程中如果出现如下错误,说明显卡不支持CUDA的最低要求
1
|
CUDA backend for DNN module requires CC 5.3 or higher. Please remove unsupported architectures from CUDA_ARCH_BIN option.
|
安装或者编译错误
opencv_contrib-4.1.1/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function ‘bilateral_caller’
cmake项目编译出现undefined reference to `cv::freetype::createFreeType2()
参考
https://medium.com/repro-repo/install-cuda-10-1-and-cudnn-7-5-0-for-pytorch-on-ubuntu-18-04-lts-9b6124c44cc
https://gist.github.com/raulqf/f42c718a658cddc16f9df07ecc627be7