Opencv 源码编译以及调用相关

查看Ubuntu上面已经安装的opencv的版本

pkg-config --modversion opencv

源码编译

  • 源码下载, 注意其中的batch, 选择一致。
git clone https://github.com/opencv/opencv.git
# 下面的仓库为第三方库,可以根据需要选择
git clone https://github.com/opencv/opencv_contrib.git

openEuler上源码安装

  • 安装依赖
sudo dnf install eigen3
sudo dnf install cmake g++

比较简单的编译选项

mkdir build 
cd build 

cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D INSTALL_PYTHON_EXAMPLES=OFF \
        -D INSTALL_C_EXAMPLES=OFF \
        -D OPENCV_ENABLE_NONFREE=ON \
        -D BUILD_NEW_PYTHON_SUPPORT=ON \
        -D OPENCV_GENERATE_PKGCONFIG=ON \
        -D OPENCV_PC_FILE_NAME=opencv4.pc \
        -D WITH_TBB=ON \
        -D ENABLE_FAST_MATH=1 \
        -D CUDA_FAST_MATH=1 \
        -D WITH_CUBLAS=1 \
        -D WITH_CUDA=ON \
        -D BUILD_opencv_cudacodec=OFF \
        -D WITH_CUDNN=OFF \
        -D OPENCV_DNN_CUDA=OFF \
        -D CUDA_ARCH_BIN=7.5 \
        -D WITH_V4L=ON \
        -D WITH_QT=OFF \
        -D WITH_OPENGL=ON \
        -D WITH_QT=OFF \
        -D WITH_GSTREAMER=OFF \
        -D WITH_FFMPEG=OFF \
        -D WITH_OPENCL=ON \
        -D OPENCV_ENABLE_NONFREE=ON \
        -D ENABLE_PRECOMPILED_HEADERS=YES \
        -D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
        -D BUILD_EXAMPLES=OFF ..

cmake --build ./ -j

#安装的路径为指定的 CMAKE_INSTALL_PREFIX=/usr/local 路径 
cmake --install ./


# 在aarch 64 上面指定相关的编译选项
cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D INSTALL_PYTHON_EXAMPLES=OFF \
        -D INSTALL_C_EXAMPLES=OFF \
        -D OPENCV_ENABLE_NONFREE=ON \
        -D BUILD_NEW_PYTHON_SUPPORT=OFF \
        -D OPENCV_GENERATE_PKGCONFIG=ON \
        -D OPENCV_PC_FILE_NAME=opencv4.pc \
        -D WITH_TBB=OFF \
        -D ENABLE_FAST_MATH=1 \
        -D CUDA_FAST_MATH=1 \
        -D WITH_CUBLAS=OFF \
        -D WITH_CUDA=OFF \
        -D BUILD_opencv_cudacodec=OFF \
        -D WITH_CUDNN=OFF \
        -D OPENCV_DNN_CUDA=OFF \
        -D WITH_V4L=ON \
        -D WITH_QT=OFF \
        -D WITH_OPENGL=ON \
        -D WITH_QT=OFF \
        -D WITH_GSTREAMER=OFF \
        -D WITH_FFMPEG=OFF \
        -D WITH_OPENCL=ON \
        -D ENABLE_PRECOMPILED_HEADERS=YES \
        -D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
        -D BUILD_EXAMPLES=OFF ..

关于其中的 -j 选项说明

关于-j选项的几点说明:
1. -j后跟的数字表示要使用的最大线程数。CMake会根据系统 cpu 核数和其他限制自动确定实际要使用的线程数。
2. 如果不指定-j,CMake会自动根据系统环境设置默认的线程数。通常等于cpu核数加一。
3. 指定的最大线程数-j值不代表CMake一定会使用指定数量的线程。它会根据项目设置、依赖关系等因素自动调节实际使用的线程数,但不会超过指定的最大值。
4. -j的值设置得太高不一定能提高构建速度,反而可能对I/O造成压力而降低效率。通常设置为cpu核数的1-2倍就可以达到较好的效果。
5. 在多核系统下,合理设置-j值可以充分利用cpu并行能力,提高构建速度。但在单核系统下,设置-j反而可能延长构建时间,推荐省略-j选项让CMake自动判断。

选定视频编解码框架编译到opencv中

安装gstreamer
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio


# 检查安装
pkg-config --cflags --libs gstreamer-1.0
安装ffmpeg
sudo apt install ffmpeg
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev
编译配置
cd opencv
mkdir buildcd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D PYTHON_EXECUTABLE=$(which python2) \
-D BUILD_opencv_python2=OFF \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ \
-D WITH_GSTREAMER=ON \
-D WITH_FFMPEG=ON \
-D WITH_CUDA=ON \
 ..

查看已经安装的opencv库的编译选项

import cv2
print(cv2.getBuildInformation())

关于OpenGL的软件包的支持

sudo apt install mesa-utils
glxinfo | grep OpenGL

在这里插入图片描述

nvidia jetson 源码安装

  • https://github.com/AastaNV/JEP/blob/master/script/install_opencv4.5.0_Jetson.sh
  • DK nvidia jetson agx orin dk
  • soft r36
  • opencv 4.7 https://gitcode.net/opencv/opencv
  • error
  • 在这里插入图片描述
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp: In instantiation of ‘void cv::dnn::cuda4dnn::RegionOp<T>::forward(const std::vector<cv::Ptr<cv::dnn::dnn4_v20221220::BackendWrapper> >&, const std::vector<cv::Ptr<cv::dnn::dnn4_v20221220::BackendWrapper> >&, cv::dnn::cuda4dnn::csl::Workspace&) [with T = __half]’:
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:94:14:   required from here
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: error: ambiguous overload for ‘operator>’ (operand types are ‘__half’ and ‘int’)
  124 |             if (nms_iou_threshold > 0) {
      |                 ~~~~~~~~~~~~~~~~~~^~~
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(int, int)’ (built-in)
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(long long unsigned int, int)’ (built-in)
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(long long int, int)’ (built-in)
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(long unsigned int, int)’ (built-in)
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(long int, int)’ (built-in)
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(unsigned int, int)’ (built-in)
/home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/primitives/region.hpp:124:35: note: candidate: ‘operator>(float, int)’ (built-in)
In file included from /usr/local/cuda/include/cuda_fp16.h:4070,
                 from /usr/local/cuda/include/cublas_api.h:77,
                 from /usr/local/cuda/include/cublas_v2.h:69,
                 from /home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../cuda4dnn/csl/cublas.hpp:14,
                 from /home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../op_cuda.hpp:1,
                 from /home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/region_layer.cpp:44:
/usr/local/cuda/include/cuda_fp16.hpp:720:42: note: candidate: ‘bool operator>(const __half&, const __half&)’
  720 | __CUDA_HOSTDEVICE__ __forceinline__ bool operator> (const __half &lh, const __half &rh) { return __hgt(lh, rh); }
      |                                          ^~~~~~~~
In file included from /home/orin/workspace/opencv/opencv-4.7.0/modules/core/include/opencv2/core.hpp:5,
                 from /home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/../precomp.hpp:4,
                 from /home/orin/workspace/opencv/opencv-4.7.0/modules/dnn/src/layers/fully_connected_layer.cpp:43:
  • follow https://github.com/opencv/opencv/pull/24104/files
cmake -B release -D WITH_CUDA=ON -D WITH_CUDNN=ON -D CUDA_ARCH_BIN="5.3,6.2,7.2,8.7" -D CUDA_ARCH_PTX="" -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.7/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local
cmake --build release --parallel 
sudo cmake --build release --target install

可以参考的编译脚本

  • https://github.com/opencv/opencv/issues/22132
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值