1.安装依赖库
sudo apt install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \
libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
2.在官网或者github上下载opencv3.1.0
github:GitHub - opencv/opencv at 3.1.0
3.解压并复制到主目录下重命名为opencv,打开终端
cd pencv
mkidr build && cd build
4.使用cmake命令配置opencv构建
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON
-DENABLE_PRECOMPILED_HEADERS=OFF ..
出现下面长时间下载不完的情况时,或者没有下载下来,出现下面第二个图报错时,直接使用提供的链接下载,将下载好的ippicv_linux_20151201.tgz放在3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/目录下
ippicv_linux_20151201.tgz-深度学习文档类资源-优快云下载在
回到build下,删除里面的文件重新第4步
如果出现上面图中vtk的错误,是因为VTK7.0版本后将 vtkRenderingOpenGL改成vtkRenderingOpenGL2
解决方法:
在opencv/cmake目录下,将OpencvDetectVTK.cmake文件中前几行的对应模块名后面加个2,具体如下:
将
find_package(VTK QUIET COMPONENTS vtkRenderingOpenGL vtkInteractionStyle vtkRenderingLOD vtkIOPLY vtkFiltersTexture vtkRenderingFreeType vtkIOExport NO_MODULE)
改成
find_package(VTK QUIET COMPONENTS vtkRenderingOpenGL2 vtkInteractionStyle vtkRenderingLOD vtkIOPLY vtkFiltersTexture vtkRenderingFreeType vtkIOExport NO_MODULE)
重新回到build目录下,删除里面的文件重新执行第4步
出现上图中问题,需要下载相应版本的opencv_contrib,链接:GitHub - opencv/opencv_contrib at 3.1.0
并把名字改为opencv_contrib(没有改名字还会出现同样地错误),放在opencv(如果opencv的名字没改还是会出现这个问题)目录下,位置要和图中红线的位置一样。
重新回到build目录下,删除里面的文件重新执行第4步
5.编译
make -j4
如果在make时出现stdlib.h:没有那个文件和目录错误时,是第4步cmake时没有添加
-DENABLE_PRECOMPILED_HEADERS=OFF
如果没有出现错误或者已经添加可以忽略
出现报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope时,opencv/modules/videoio/src/cap_ffmpeg_impl.hpp 里最顶端添加:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
如果没有出现错误可以忽略