Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0

【注意】最好是先删除自带的opencv4.1.1,然后将opencv4.5.0安装到/usr/local中,否则无法被jtop检测到。

一、删除自带的opencv并用jtop查看

1、安装jtop

  • 先安装pip
sudo apt-get install python3-pip
  • 安装jtop
sudo -H pip3 install -U jetson-stats
  • 使用jtop
sudo jtop

此时对应的opencv显示的是4.1.1版本,即刷完机后的初始版本。

2、卸载自带的openv4.1.1

sudo apt-get purge libopencv*

如果安装了别的版本的opencv,只要删除对应的安装文件夹就行了。
卸载完成之后,此时再次查看jtop,发现opencv显示未安装:
Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第1张图片

二、编译cuda版本的opencv4.5.0

1、下载opencv4.5.0和opencv-contrib4.5.0的源码包
opencv4.5.0:https://github.com/opencv/opencv/releases
opencv-contrib4.5.0:https://github.com/opencv/opencv_contrib/releases

2、解压opencv4.5.0与opencv-contrib4.5.0,并将opencv-contrib4.5.0文件夹放到opencv4.5.0文件夹中

3、安装依赖

sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

4、进入opencv4.5.0文件夹,创建build文件夹,进入build文件夹,进行cmake配置。

cd opencv4.5.0
mkdir build
cd build

cmake各参数定义:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/ -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D CUDA_ARCH_BIN='7.2' -D WITH_CUDA=1 -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D OPENCV_GENERATE_PKGCONFIG=1 -D WITH_GTK_2_X=ON ..

cmake各参数含义参考下图:
Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第2张图片
5、进行make,make成功后,进行安装。

sudo make -j8
sudo make install

6、添加环境变量
/etc/ld.so.conf.d/opencv.conf添加安装opencv的路径:

sudo gedit /etc/ld.so.conf.d/opencv.conf 
/usr/local/lib
sudo ldconfig       # 使配置生效

/etc/bash.bashrc中添加pkgconfig路径:

sudo gedit /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH 
source /etc/bash.bashrc      # 使配置生效
sudo updatedb

7、至此,安装成功,可以使用命令pkg-config --modversion opencv4查看是否安装成功以及版本号。
用jtop查看是否编译成功:
Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第3张图片

三、测试及问题解决

1、测试安装的opencv4.5.0能不能用

进入./opencv4.5.0/samples/cpp文件夹,里面有很多可测试的例子,随便运行一个:

g++ edge.cpp `pkg-config opencv4 --cflags --libs` -o test

注意要使用opencv4 ,否则会报错:
Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第4张图片
如果之前删除了自带的opencv4.1.1,那么这个例子能够编译且成功运行。

#####################################################################

【如果没有删除自带的opencv4.1.1】上面的这个例子能够编译成功,但运行时候会出错:

./test: error wwhile loading shared libraries: libopencv_highgui.so.4.5: cannot open shared object file: No such file or directory


可能是因为Xavier上自带了opencv4.1.1,我在运行的时候没指定是哪个版本的opencv,因此需要将opencv4.5.0添加到环境变量:

vi ~/.bashrc

添加:

export PKG_CONFIG_PATH=/usr/local/opencv4.5/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv4.5/lib
source ~/.bashrc

Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第5张图片
然后再次运行,能够运行成功:
Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第6张图片
2、其他问题

我一开始先挂载了硬盘,挂载到/home目录下,再编译的opencv,能够make成功,但是在make install的时候会报错:
Jetson AGX Xavier编译CUDA版本的OpenCV4.5.0_第7张图片
后来我把硬盘挂载到其他的目录下,在Xavier原来的磁盘中编译opencv,就能成功了。不知道为啥子。

你可能感兴趣的:(Xavier相关,linux,opencv,cmake,cuda)