安装 OpenCV
编译安装 OpenCV on Linux
以 Ubuntu 和 OpenCV 4.0.0 为例
Ubuntu 编译安装 OpenCV
安装依赖
sudo apt update sudo apt upgrade sudo apt-get install build-essential cmake unzip pkg-config sudo apt-get install libjpeg-dev libpng-dev libtiff-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 libatlas-base-dev gfortran
下载源码
cd ~ wget https://github.com/opencv/opencv/archive/4.0.0.zip wget https://github.com/opencv/opencv_contrib/archive/4.0.0.zip
解压移动
同时也编译
opencv_contrib
,这之中有许多有用的模块,虽然我很多用不到unzip opencv.zip unzip opencv_contrib.zip mv opencv-4.0.0 opencv mv opencv_contrib-4.0.0 opencv_contrib
编译安装
漫长的编译之旅,~make~ 将产生数 G 的文件
cd opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D BUILD_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules .. make -j4 sudo make install
执行
make
时可能会出错,因为cmake
的时可以因为网络问题一些东西没有下载到本地,导致make
出错,提示是缺少名如boostdesc_xxx.i, vgg_generated_xxx.i
的文件,可以从 CMakeError.log 中获取相应下载地址手动下载,有了 boostdesc_xxx,vgg_generated_xxx,xfeatures2d 等相关的文件后,编译就不会出错了,但是cmake
时因网络问题,应该还会有几个文件没有下载,如 ippicv 这个可以提高 OpenCV 的性能,还有face_landmark_model.dat
用于面部识别的模型,可以选择使用export ALL_PROXY=portocol://ip:port
指令让终端使用代理。测试
opencv_version
这条命令会让终端输出版本号,也可以编译一个简单的程序验证:
Source Code
// filename: cvTest.cpp #include <iostream> #include <opencv2/opencv.hpp> int main(int argc, char const *argv[]) { if (argc != 1) { // the program only need one parameter std::cout << "error! usage: cvTest.out" << std::endl; } cv::Mat img(200, 200, CV_8UC1); // create a image cv::namedWindow("cvTest", cv::WINDOW_AUTOSIZE); // create a window cv::imshow("cvTest", img); // show 'img' in the window cv::waitKey(0); //press any key to close the window return 0; }
Compile it(with [CMakeLists.txt](#CMakeLists-txt))
cmake . make && ./cvTest
出现一张 200×200 的黑色图片就说明 OpenCV 安装成功且 CMake 也配置正确。
我是使用的 FedoraRemix WSL,执行
./cvTest
时出现如下错误:error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
可以使用如下指令解决(参见 GitHub issue):sudo strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5 #!/bin/sh if [ -x /usr/lib64/libQt5Core.so.5 ]; then (set -x; strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5) fi # This "atomic bomb" workaround helps too: find /lib /usr/lib /usr/libexec -name '*.so' | xargs strip --remove-section=.note.ABI-tag
QT + OpenCV
在 .pro 文件添加以下内容:
INCLUDEPATH += \ /usr/local/include/opencv4 LIBS += -L/usr/local/lib64 \ -lopencv_aruco \ -lopencv_bgsegm \ -lopencv_bioinspired \ -lopencv_calib3d \ -lopencv_ccalib \ -lopencv_core \ -lopencv_datasets \ -lopencv_dnn_objdetect \ -lopencv_dnn \ -lopencv_dnn_superres \ -lopencv_dpm \ -lopencv_face \ -lopencv_features2d \ -lopencv_flann \ -lopencv_freetype \ -lopencv_fuzzy \ -lopencv_gapi \ -lopencv_hfs \ -lopencv_highgui \ -lopencv_imgcodecs \ -lopencv_img_hash \ -lopencv_imgproc \ -lopencv_line_descriptor \ -lopencv_ml \ -lopencv_objdetect \ -lopencv_optflow \ -lopencv_phase_unwrapping \ -lopencv_photo \ -lopencv_plot \ -lopencv_quality \ -lopencv_reg \ -lopencv_rgbd \ -lopencv_saliency \ -lopencv_shape \ -lopencv_stereo \ -lopencv_stitching \ -lopencv_structured_light \ -lopencv_superres \ -lopencv_surface_matching \ -lopencv_text \ -lopencv_tracking \ -lopencv_videoio \ -lopencv_video \ -lopencv_videostab \ -lopencv_xfeatures2d \ -lopencv_ximgproc \ -lopencv_xobjdetect \ -lopencv_xphoto
CMakeLists.txt
cmake_minimum_required(VERSION 2.8) project( cvTest ) find_package( OpenCV REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ) add_executable( cvTest cvTest.cpp ) target_link_libraries( cvTest ${OpenCV_LIBS} )
FedoraRemix WSL 编译 OpenCV
最新版的 FedoraRemix WSL 也就是 Fedora 31 ,直接从官方仓库安装的 OpenCV 无法读取视频,发现是 FFmpeg 没有安装,官方仓库没有 FFmpeg,可以添加其他仓库安装 FFmpeg,我选择是编译安装,顺便把官方仓库安装的 OpenCV 卸载了,改用编译安装的 OpenCV。
安装依赖
sudo dnf install python-devel # Python支持 sudo dnf install ncurses-devel nasm yasm # 为编译FFmpeg sudo dnf install gtk+ gtk+-devel gtk2 gtk2-devel gtkglext-devel # OpenCV所依赖的图形化界面 sudo dnf install libavc1394 libavc1394-devel libdc1394 libdc1394-devel # DC1394视频支持 sudo dnf install openjpeg-devel libjpeg-devel libpng-devel libtiff-devel
- 下载源码 参考前文:Ubuntu 编译安装 OpenCV FFmpeg 下载链接: FFmpeg
编译 FFmpeg
cd unzip FFmpeg-n4.2.2.zip cd FFmpeg-n4.2.2 ./configure --disable-static --enable-shared make && sudo make install
主要是
--enabel-shared
,可输入./configure --help
查看更多编译选项,如--enable-libx264 --enable-avresample --disabled-swresample
等。但执行
ffmpeg
出现了找不到链接库的错误,解决方法是在/etc/ld.conf.d/
下新建一个文件ffmpeg.conf
,添加内容:/usr/local/lib
到这个新建的文件中sudo vi /etc/ld.so.conf.d/ffmpeg.conf sudo ldconfig ffmpeg
编译 OpenCV 编译前先执行下列指令,不然会导致
FFmpeg
找不到export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:PKG_CONFIG_PATH
然后进入 OpenCV 目录进行编译
cd opencv # 进入 OpenCV 源码所在目录 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREEIX=/usr/local \ -D BUILD_EXAMPLES=ON \ -D BUILD_OPENCV_PYTHON2=OFF \ -D BUILD_OPENCV_PYTHON3=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D WITH_CUDA=OFF \ -D WITH_FFMPEG=ON \ -D WITH_OPENGL=ON .. make -j4 # 多线程编译,加快速度 sudo make install
直接安装 OpenCV
从官方仓库安装的版本一般都不是最新版,如果要安装最新版的话最好老老实实的编译安装。
Fedora
Fedora 是 Red Hat 的社区版本,软件版本都比较新,Fedora 31 现在最新的 OpenCV 版本是 3.4.6,可以通过下列命令直接安装。
sudo dnf install opencv opencv-devel opencv-contrib
CentOS 系统的话把 dnf
换成 yum
就行,CentOS 8 可直接使用 dnf
安装。CentOS 7.6 通过此方法安装的是 OpenCV 2.4.5。
macOS
未安装 brew 先安装 brew 包管理器,安装 brew,如果有梯子的话使用
export ALL_PROXY=127.0.0.1:1086
再用 curl ip.sb
或者 curl ip.gs
验证,这时终端进入全局代理模式,这样下载速度就取决于你的梯子速度了。没有梯子的话可以从把源改成国内源的如清华源、中科大源或者阿里源。
安装完 brew 再执行
brew install opencv
brew 会安装很多依赖,全部完成后就安装了 OpenCV,通过 brew 安装的是最新版的 OpenCV,目前是 4.1.2。
Windows
Windows 系统可以从官方下载编译后的压缩包,压缩包一般都有对应的 vc 版本。之后 Visual Studio 若要使用 OpenCV 的话还需要配置工程属性。
附表:
Visual C++ Version | Visual Studio Version |
---|---|
VC12 | VS2013 |
VC14 | VS2015 |
VC15 | VS2017 |