jetson orin系列开发版安装cuda的gpu版本的opencv
因为在cmake时,选择了自动生成OpenCV的pkgconfig文件,在/usr/local/lib/pkgconfig路径可以看到文件opencv4.pc。是一个新建的空文件,直接添加路径,同理这个路径是cmake编译时填的动态库安装路径加上/lib。再删除/usr/include/目录下的头文件文件夹opencv。再删除/usr/share/目录下的opencv文件夹。将 lib 文件夹复制
引言必看
video sdk目前不支持jetson,我也不知道为啥官方给了aarch64的so占位符,到底为了证明什么,搞jetson且想用硬解码解析视频的下伙伴可以不用看了
https://github.com/NVIDIA/VideoProcessingFramework/pull/515

https://github.com/opencv/opencv_contrib/issues/3840

opencv安装包下载地址:
https://github.com/opencv/opencv/
扩展库下载地址:
https://github.com/opencv/opencv_contrib
以下是我的目录结构:
/home/jetson/nvidia-codec/
├── nv-codec-headers/
├── Video_Codec_SDK_12.0.16/
│ ├── Doc/
│ ├── Interface/
│ │ ├── cuviddec.h
│ │ ├── nvcuvid.h
│ │ └── nvEncodeAPI.h
│ └── Lib/
│ ├── linux/
│ │ ├── stubs/
│ │ │ ├── aarch64/
│ │ │ │ ├── libnvcuvid.so
│ │ │ │ └── libnvidia-encode.so
│ │ │ ├── ppc64le/
│ │ │ │ ├── libnvcuvid.so
│ │ │ │ └── libnvidia-encode.so
│ │ │ └── x86_64/
│ │ │ ├── libnvcuvid.so
│ │ │ └── libnvidia-encode.so
│ │ ├── Win32/
│ │ └── x64/
├── ffmpeg/
├── opencv-4.10.0/
│ ├── build/
│ └── install/
│ ├── bin/
│ ├── include/
│ ├── lib/
│ └── share/
└── opencv_contrib-4.10.0/
└── modules/
**注意
经过实测,发现可以不用安装ffmpeg的video cuda sdk版本也可以使用opencv的video cuda sdk的,但是不安装的话,直接使用ffmpeg就使用不了cuda,ffmpeg版本的cuda video sdk依赖于valkan0
0.软件安装
0.1安装ffmpeg(参考官方文档)
sudo apt -y remove ffmpeg
Clone ffnvcodec
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
Install ffnvcodec
cd nv-codec-headers && sudo make install && cd ..
Clone FFmpeg’s public GIT repository.
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
Install necessary packages.
sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev
Configure
./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared
Compile
make -j8
Install the libraries.
sudo make install
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
0.2 安装nvidia-video-codec-sdk
(1) 查看当前 JetPack 版本对应的驱动版本
JetPack 是 NVIDIA 提供的 SDK,包含了操作系统、驱动、库和开发工具。每个 JetPack 版本都固定包含一组驱动程序。
以下是部分 JetPack 版本与 NVIDIA 驱动版本的对应关系:
| JetPack Version | Driver Version | L4T Version |
|---|---|---|
| JetPack 5.1.2 | 525.x | L4T 35.4.1 |
| JetPack 5.1.1 | 525.x | L4T 35.3.1 |
| JetPack 5.1 | 525.x | L4T 35.2.1 |
| JetPack 5.0.2 | 515.x | L4T 35.1.0 |
| JetPack 4.6.4 | 32.x | L4T 32.7.4 |
| JetPack 4.6 | 32.x | L4T 32.6.1 |
说明:
驱动版本 470.57.02 属于 JetPack 4.x 系列的范畴。
如果你需要更高版本的驱动(例如 525.x),需要升级到 JetPack 5.x 系列。
我的设备的截图如下

可以看到我的设备是jetpack-5.1.2的,对应525.x的英伟达显卡驱动
(2) Video_Codec_SDK下载以及安装
nvidia-video-codec-sdk下载链接如下:
https://developer.nvidia.com/nvidia-video-codec-sdk/download
我下载的是Video_Codec_SDK_12.0.16,根据文件夹里面的Read_Me.pdf描述如下:
可以看到
‣ Linux: Driver version 520.56.06 or higher
‣ CUDA 11.0 or higher Toolkit
这样的系统要求就符合我们刚jtop看到的
下载安装包解压后分别把头文件和动态库copy到你的cuda目录,比如:/usr/local/cuda/include , /usr/local/cuda/lib64
如果include目录下存在dynlink_cuviddec.h dynlink_loader.h dynlink_nvcuvid.h等头文件,则一定要删除;
进入下载的Video_Codec_SDK目录,执行以下代码:
sudo cp -r ./Interface/cuviddec.h /usr/local/cuda/include
sudo cp -r ./Interface/nvcuvid.h /usr/local/cuda/include
sudo cp -r ./Interface/nvEncodeAPI.h /usr/local/cuda/include
sudo cp -r ./Lib/linux/stubs/aarch64/libnvcuvid.so /usr/local/cuda/lib64
sudo cp -r ./Lib/linux/stubs/aarch64/libnvidia-encode.so /usr/local/cuda/lib64
sudo rm -rf /usr/local/cuda/lib64/libnvcuvid.so.1
sudo ln -sf /usr/local/cuda/lib64/libnvcuvid.so /usr/local/cuda/lib64/libnvcuvid.so.1
sudo rm -rf /usr/local/cuda/lib64/libnvidia-encode.so.1
sudo ln -sf /usr/local/cuda/lib64/libnvidia-encode.so /usr/local/cuda/lib64/libnvidia-encode.so.1
1. 删除jetpack包中的opencv版本
原先的opencv库安装在目录/usr/lib/aarch64-linux-gnu/下(一般其他的第三方库也都安装在该目录下),首先将该目录下所有的libopencv*库删除:
sudo rm /usr/lib/aarch64-linux-gnu/libopencv*
再删除/usr/lib/aarch64-linux-gnu/pkgconfig/目录下的opencv.pc文件,如果是opencv4.X版本的,则为opencv4.pc,使用命令删除该文件:
sudo rm /usr/lib/aarch64-linux-gnu/pkgconfig/opencv*
再删除/usr/share/目录下的opencv文件夹
sudo rm -r /usr/share/opencv*
再删除/usr/include/目录下的头文件文件夹opencv
sudo rm -r /usr/include/opencv*
再删除/usr/bin/目录下的应用程序
sudo rm /usr/bin/opencv*
至此,jetpack包中的opencv已全部删除。
2. 删除手动安装包中的opencv版本
sudo apt-get remove --purge libopencv* python3-opencv
sudo rm -rf /usr/local/lib/libopencv_*
sudo rm -rf /usr/local/lib/pkgconfig/opencv4.pc
sudo rm -rf /usr/local/include/opencv*
sudo rm -rf /usr/local/bin/opencv_*
3. 安装依赖以及编译
CUDA_ARCH_BIN是GPU的算力等级,根据自己的显卡型号在NVIDIA官网查看。
https://developer.nvidia.com/cuda-gpus

我的设备是jetson orin nano,所以我选的是8.7。
一键编译脚本build-opencv.sh,将这个脚本放在下载的opencv同级目录:
#!/bin/bash
sudo apt-get update
sudo apt install -y \
build-essential \
pkg-config \
libgtk2.0-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
libjpeg-dev \
libtiff5-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libvtk7-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libjpeg8-dev \
libpng-dev \
libdc1394-22-dev \
libxine2-dev \
libtbb-dev \
libatlas-base-dev \
libfaac-dev \
libmp3lame-dev \
libtheora-dev \
libvorbis-dev \
libopencore-amrnb-dev \
libopencore-amrwb-dev \
x264 \
v4l-utils \
libtbb2
# 设置工作目录
BASE_DIR=$(pwd)
OPENCV_DIR="${BASE_DIR}/opencv-4.10.0"
INSTALL_DIR="${OPENCV_DIR}/install"
BUILD_DIR="${OPENCV_DIR}/build"
CONTRIB_DIR="${BASE_DIR}/opencv_contrib-4.10.0"
# 创建安装和构建目录
mkdir -p "${INSTALL_DIR}"
mkdir -p "${BUILD_DIR}"
# 进入构建目录
cd "${BUILD_DIR}"
# 运行 CMake
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
-D OPENCV_EXTRA_MODULES_PATH="${CONTRIB_DIR}/modules" \
-D WITH_LIBV4L=ON \
-D CUDA_ARCH_BIN=8.7 \
-D WITH_CUDA=ON \
-D WITH_CUDACODEC=ON \
-D BUILD_opencv_cudacodec=ON \
-D OPENCV_DNN_CUDA=ON \
-D WITH_CUFFT=ON \
-D WITH_IPP=ON \
-D WITH_EIGEN=ON \
-D CUDA_SDK_ROOT_DIR=/usr/local/cuda \
-D CUDNN_LIBRARY=/usr/lib/aarch64-linux-gnu/libcudnn.so.8 \
-D CUDNN_INCLUDE_DIR=/usr/include \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_NVCUVID=ON \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_OPENGL=ON \
-D ENABLE_CXX11=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_nppi_LIBRARY=true \
-D OPENCV_GENERATE_PKGCONFIG=YES \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_FFMPEG=ON ..
# 编译
make -j$(nproc) # 调整为根据实际CPU核心数选择合适的线程数
make install
3.1 更新系统依赖库
sudo apt-get update
sudo apt-get install -y \
build-essential \
pkg-config \
libgtk2.0-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
libjpeg-dev \
libtiff5-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libvtk7-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libjpeg8-dev \
libpng-dev \
libdc1394-22-dev \
libxine2-dev \
libtbb-dev \
libatlas-base-dev \
libfaac-dev \
libmp3lame-dev \
libtheora-dev \
libvorbis-dev \
libopencore-amrnb-dev \
libopencore-amrwb-dev \
x264 \
v4l-utils \
libtbb2
3.2 创建编译build目录以及运行 CMake
cd opencv-4.10.0 && mkdir build && mkdir install && cd build
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/jetson/opencv-4.10.0/install \
-D OPENCV_EXTRA_MODULES_PATH=/home/jetson/opencv_contrib-4.10.0/modules \
-D WITH_LIBV4L=ON \
-D CUDA_ARCH_BIN=8.7 \
-D WITH_CUDA=ON \
-D WITH_CUDACODEC=ON \
-D BUILD_opencv_cudacodec=ON \
-D OPENCV_DNN_CUDA=ON \
-D WITH_CUFFT=ON \
-D WITH_IPP=ON \
-D WITH_EIGEN=ON \
-D CUDA_SDK_ROOT_DIR=/usr/local/cuda \
-D CUDNN_LIBRARY=/usr/lib/aarch64-linux-gnu/libcudnn.so.8 \
-D CUDNN_INCLUDE_DIR=/usr/include \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_NVCUVID=ON \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_OPENGL=ON \
-D ENABLE_CXX11=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_nppi_LIBRARY=true \
-D OPENCV_GENERATE_PKGCONFIG=YES \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_FFMPEG=ON ..
*注意
cmake之后一定要看到
-- NVIDIA CUDA: YES (ver 11.4, CUFFT CUBLAS NVCUVID NVCUVENC FAST_MATH)
里面要有NVCUVID 才行。不然就属于失败
3.3 开始编译以及生成库
make -j4 && make install
3.4 opencv库的安装
命令执行结束,在install生成库文件,我的文件夹结构为:
/home/jetson/nvidia-codec/
├── opencv-4.10.0
│ ├── build
│ └── install
│ ├── bin
│ ├── include
│ ├── lib
│ └── share
└── opencv_contrib-4.10.0
└── modules
下面开始将库文件拷贝到系统目录,在install目录下打开终端,分别执行以下命令:
(1)修改opencv-4.10.0/install/lib/pkgconfig/opencv4.pc
vim lib/pkgconfig/opencv4.pc
原始的:
# Package Information for pkg-config
prefix=/home/jetson/opencv-4.10.0/install
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv4
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.10.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_signal -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_viz -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
Libs.private: -lm -lpthread -lcudart_static -ldl -lrt -lnppc -lnppial -lnppicc -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft -L-L/usr/local/cuda-11.4 -llib64 -L-L/usr/lib -laarch64-linux-gnu
Cflags: -I${includedir}
新的:
# Package Information for pkg-config
prefix=prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv4
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.10.0
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_signal -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_viz -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
Libs.private: -lm -lpthread -lcudart_static -ldl -lrt -lnppc -lnppial -lnppicc -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft -L-L/usr/local/cuda-11.4 -llib64 -L-L/usr/lib -laarch64-linux-gnu
Cflags: -I${includedir}
(2)将 bin 文件夹复制到 /usr/local
sudo cp -r bin/* /usr/local/bin/
(3)将 include 文件夹复制到 /usr/local/include
sudo cp -r include/* /usr/local/include/
(4)将 lib 文件夹复制到 /usr/local/lib
sudo mv lib/python3.8/site-packages lib/python3.8/dist-packages
sudo cp -r lib/* /usr/local/lib/
(5)将 share 文件夹复制到 /usr/local/share
sudo cp -r share/* /usr/local/share/
4. 将OpenCV的库添加到系统路径
4.1 方法一:配置ld.so.conf文件
sudo vim /etc/ld.so.conf
在文件中加上一行
include /usr/local/lib
这个路径是cmake编译时填的动态库安装路径加上/lib
配置ld.so.conf文件
4.2 方法二:手动生成opencv.conf文件
sudo vim /etc/ld.so.conf.d/opencv.conf
是一个新建的空文件,直接添加路径,同理这个路径是cmake编译时填的动态库安装路径加上/lib
/usr/local/lib
4.3 应用配置更新
以上两种方法配置好后,执行如下命令使得配置的路径生效
sudo ldconfig
配置系统bash
因为在cmake时,选择了自动生成OpenCV的pkgconfig文件,在/usr/local/lib/pkgconfig路径可以看到文件opencv4.pc
确保文件存在,执行如下命令
sudo vim /etc/bash.bashrc
在文末添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
如下:
bash.bashrc
保存退出,然后执行如下命令使配置生效
source /etc/bash.bashrc
echo 'export CPLUS_INCLUDE_PATH=/usr/local/include/opencv:/usr/local/include/opencv4:$CPLUS_INCLUDE_PATH' >> ~/.bashrc
echo 'export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
至此,Linux\Ubuntu18.04环境下OpenCV的安装以及配置已经全部完成,可以使用以下命令查看是否安装和配置成功
pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs opencv4
最后添加软链接,确保C++编译没问题:
sudo mv /usr/local/include/opencv4 /usr/local/include/opencv
sudo ln -s /usr/local/include/opencv/opencv2 /usr/local/include/opencv2
sudo ln -s /usr/local/include/opencv/opencv2 /usr/local/include/opencv4
安装jtop,也可查看:
sudo -H pip3 install -U jetson-stats
以下是我的jtop截图
我编译的install可以在这里下载:
https://download.csdn.net/download/weixin_43269994/90024750
下面是一键安装install.sh,将这个脚本放在install目录直接执行即可
#!/bin/bash
# 定义一个函数来执行带有密码的sudo命令
sudo_with_password() {
echo "nvidia" | sudo -S "$@"
}
sudo_with_password rm -rf /usr/lib/python3/dist-packages/OpenSSL
# 安装 Python 依赖项
echo "Installing Python dependencies..."
pip install numpy==1.23.5 -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo_with_password pip uninstall -y opencv-python
pip install pyOpenSSL -i https://pypi.tuna.tsinghua.edu.cn/simple
# 更新软件包列表
echo "Updating package list..."
sudo_with_password apt-get -y update
sudo_with_password -H pip3 install -U jetson-stats
# 删除JetPack中的OpenCV版本
echo "Deleting JetPack OpenCV version..."
sudo_with_password rm -f /usr/lib/aarch64-linux-gnu/libopencv*
sudo_with_password rm -f /usr/lib/aarch64-linux-gnu/pkgconfig/opencv*
sudo_with_password rm -rf /usr/share/opencv*
sudo_with_password rm -rf /usr/include/opencv*
# 删除手动安装的OpenCV版本
echo "Deleting manually installed OpenCV version..."
sudo_with_password apt-get remove --purge -y libopencv* python3-opencv
sudo_with_password rm -rf /usr/local/lib/libopencv_*
sudo_with_password rm -rf /usr/local/lib/pkgconfig/opencv4.pc
sudo_with_password rm -rf /usr/local/include/opencv*
sudo_with_password rm -rf /usr/local/bin/opencv_*
echo "OpenCV has been completely removed."
# 安装编译依赖项
echo "Installing dependencies for building OpenCV..."
sudo_with_password apt-get install -y \
build-essential \
pkg-config \
libgtk2.0-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
libjpeg-dev \
libtiff5-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libvtk7-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libjpeg8-dev \
libpng-dev \
libdc1394-22-dev \
libxine2-dev \
libtbb-dev \
libatlas-base-dev \
libfaac-dev \
libmp3lame-dev \
libtheora-dev \
libvorbis-dev \
libopencore-amrnb-dev \
libopencore-amrwb-dev \
x264 \
v4l-utils \
libtbb2
# 假设接下来的操作是为了将新编译或下载的OpenCV文件移动到正确的位置
# 注意:这里假设了 'bin', 'include' 和 'lib' 目录已经存在并包含了正确的文件
echo "Copying new OpenCV files to system directories..."
sudo_with_password cp -r bin/* /usr/local/bin/
sudo_with_password cp -r include/* /usr/local/include/
sudo_with_password cp -r lib/* /usr/local/lib/
sudo_with_password cp -r lib/*.so /usr/local/lib/
# 检查并移动 Python 包目录
if [ -d "lib/python3.8/site-packages" ]; then
echo "Moving site-packages to dist-packages..."
sudo_with_password mv lib/python3.8/site-packages lib/python3.8/dist-packages
fi
# 创建符号链接以便兼容性
sudo_with_password mv /usr/local/include/opencv4 /usr/local/include/opencv
sudo_with_password ln -s /usr/local/include/opencv/opencv2 /usr/local/include/opencv2
sudo_with_password ln -s /usr/local/include/opencv/opencv2 /usr/local/include/opencv4
sudo_with_password ldconfig
echo "OpenCV installation preparation complete."
4.4 cuda-opencv 样例
4.4.1 GPU读流的操作
具体读流函数如下所示:
opencv的gpu读取的视频
import cv2
def main(file_path):
cap = cv2.cudacodec.createVideoReader(file_path)
while True:
ret, frame = cap.nextFrame()
if ret is False:
break
cv2.imshow('image', frame)
cv2.waitKey(1)
cap.release()
if __name__ == '__main__':
file_path = 'test.mp4'
main(file_path)
opencv的gpu读取的rtsp
import cv2
if __name__ == '__main__':
rtsp_url = 'rtsp://admin:1aaaaa@192.168.1.12/'
decoder = cv2.cudacodec.createVideoReader(rtsp_url)
#不设置的化默认是BGRA,为了方便后续处理,指定为BGR
decoder.set(cv2.cudacodec.COLOR_FORMAT_BGR)
count = 0
while True:
ret,gpu_frame = decoder.nextFrame()
if ret :
frame = gpu_frame.download()
if count == 0 :
cv2.imwrite('test_img.bmp', frame)
frame_queue.append(np.array(frame[:, :, ::-1]))
count += 1
图片的格式位GpuMat格式,并且为BGRA的格式,需要用自带的颜色转换cv2.cvtColor转换为BGR的格式,该函数在GPU中也有相应的函数可以直接转换,就不用再下载打cpu端进行操作。并且如果需要下载到CPU进行操作的话,就需要download,例如frame.download。
4.4.2 GpuMat的图像的copyTo
在python端如果进行GpuMat的拼接覆盖操作的话,必须用到copyTo操作,这个操作需要从原图之中扣出来一块区域,并且和原图指向同一个地址,这样子区域的改变才能够影响的原图,如果直接用=或者GpuMat赋值操作的话,则和原图的地址不同了,不能进行相应的操作。
具体的代码如下
import cv2
import numpy as np
def main():
# 创建两个GpuMat的矩阵
gpu_frame1 = cv2.cuda_GpuMat()
gpu_frame2 = cv2.cuda_GpuMat()
# 将图片1上传到GPUGpuMat中
image1 = cv2.imread('./1.png')
image1 = cv2.resize(image1, (640, 640))
gpu_frame1.upload(image1)
# 从图片1左上角获得一个320×320
src_roi = gpu_frame1.rowRange(0, 320).colRange(0, 320)
# 将图片2上传到GPUGpuMat中
image2 = cv2.imread('./2.png')
image2 = cv2.resize(image2, (320, 320))
gpu_frame2.upload(image2)
# 将图片2覆盖到从图片1中获得的区域
gpu_frame2.copyTo(src_roi)
# 将两个图片下载到CPU端
img1 = gpu_frame1.download()
img2 = gpu_frame2.download()
cv2.imwrite('1_1.jpg', img1)
cv2.imwrite('1_2.jpg', img2)
if __name__ == '__main__':
main()
更多推荐
所有评论(0)