opencv+opencv_contrib编译
opencv下载地址
opencv_contrib下载地址
opencv+opencv_contrib编译方法
cd ~/opencv #进入opencv 源码下,不是opencv_contrib
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=<install path> -D OPENCV_GENERATE_PKGCONFIG=YES -D OPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules -D BUILD_opencv_xfeatures2d=OFF -D BUILD_opencv_freetype=ON .. #<opencv_contrib>源码路径, opencv_xfeatures2d=OFF 包不进行编译,可以进行选择设置不需要编译的包; opencv_freetype=ON表示默认不编辑的包,开启编译;install path 表示编译完后进行安装的路径,OPENCV_GENERATE_PKGCONFIG=YES 仅在opencv4.0以上使用
make -j5
sudo make install #进行安装,安装后,将里面的所有内容作为第三方包
opencv+opencv_contrib GPU 版本编译方法
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/raid/ZXF/use_software/opencv-gpu/opencv-3.4.10/install -D OPENCV_EXTRA_MODULES_PATH=/raid/ZXF/use_software/opencv-gpu/opencv_contrib-3.4.10/modules -D CUDA_ARCH_BIN=7.0 -D WITH_CUDA=ON -D WITH_TBB=ON -D WITH_V4L=OFF -D WITH_LIBV4L=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_QT=OFF -D WITH_NVCUVID=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_opencv_xfeatures2d=OFF ..
make -j8
sudo make install
1) 加入ffmpeg
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/Comac/software/opencv/benji/opencv-4.5.4/install -D OPENCV_EXTRA_MODULES_PATH=/Comac/software/opencv/benji/opencv_contrib-4.5.4/modules -D CUDA_ARCH_BIN=8.6 -D WITH_CUDA=ON -D WITH_TBB=ON -D WITH_V4L=OFF -D WITH_LIBV4L=ON -D OPENCV_DNN_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_QT=OFF -D WITH_NVCUVID=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_opencv_xfeatures2d=OFF -D WITH_FFMPEG=ON ..
make -j8
sudo make install
2)加入 nvcuvid 硬解码与硬编码 -最终形态
- 下载NVIDIA VIDEO CODEC SDK
https://developer.nvidia.com/nvidia-video-codec-sdk - 注意每个sdk版本有cuda版本以及驱动版本的要求
- 下载包后,解压Video_Codec_SDK_11.1.5,拷贝Interface目录下的.h文件到cuda目录,拷贝命令如下:
sudo cp Video_Codec_SDK_11.1.5/Interface/* /usr/local/cuda-11.4/include/
- 编译opencv
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/Comac/上飞资料/opencv包/opencv-4.6.0/3090/install -D OPENCV_EXTRA_MODULES_PATH=/Comac/上飞资料/opencv包/opencv-4.6.0/3090/opencv_contrib-4.6.0/modules -D CUDA_ARCH_BIN=8.6 -D WITH_CUDA=ON -D OPENCV_DNN_CUDA=ON -D WITH_CUDNN=ON -D WITH_CUDEV=ON -D WITH_NVCUVID=ON -D BUILD_opencv_cudacodec=ON -D WITH_GSTREAMER=ON -D WITH_TBB=ON -D BUILD_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_LIBV4L=ON -D WITH_GTK_2_X=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_FFMPEG=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_opencv_xfeatures2d=OFF ..
5)编译后的opencv在作为第三方包进行调用时,也要把Video_Codec_SDK_11.1.5/Interface/下的头文件拷贝到对应的/usr/local/cuda/include/下
注意:在opencv 4.7之前的版本不支持 cv::cudacodec::createVideoReader 在linux 上使用,在4.7及其以后更高的版本支持
作为第三方包被c++工程调用
第一种方法:
opencv作为3rdParty中的一个第三方包opencv调用,其包含两个文件“include” “lib”
假设编译的 opencv-4.5.1+opencv-4.5.1-contrib (注意两个版本号必须一致)
第三方包名假设命名为: opencv-4.5.1
其目录格式如下:
├── 3rdParty
├──-----opencv-4.5.1
├──-----include
├──-----opencv #4.5版本不再使用,3.4.10版本含有;好像是4.0以上都没了
├──-----opencv2
├──-----lib
#其中lib文件夹来自于“ ~/opencv-4.5.1/build/lib”
#include文件内容来自与 “~/opencv-4.5.1/include” ,之后再将文件夹" ~/opencv-4.5.1/modules"和“ ~/opencv_contrib-4.5.1/modules”中的每一个模块下的opencv2中的内容复制到opencv2中,例如“~/opencv_contrib-4.5.1/modules/alphamat/include/opencv2/*”可以使用如下脚本复制所有的头文件到“include/opencv2中”
cd /raid/ZXF/use_software/opencv-4.5.1/modules #进入opencv源码下的modules文件加下
cp -rf ./*/include/opencv2/* /raid/ZXF/project/3rdParty/opencv-4.5.1-contrib/include/opencv2
cd /raid/ZXF/use_software/opencv_contrib-4.5.1/modules #进入opencv-contrib源码下的modules文件加下
cp -rf ./*/include/opencv2/* /raid/ZXF/project/3rdParty/opencv-4.5.1-contrib/include/opencv2
第二种方法:
取安装install路径下的 include 和 lib 文件 作为第三方包