安装 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 |