TX2成功安装OpenCV3.4.0记录
前言
TX2上安装OpenCV的方法我见过两种,一种是在给TX2烧录系统时将OpenCV烧录进去,当然也可以选择不烧录OpenCV; 另一种方法是通过OpenCV源码编译安装,与正常PC机安装是相同的。我们的设备核心板是Nvidia的TX2,但是底板是不同的,刷系统很麻烦,所以我们采用源码编译安装的方法来安装OpenCV。最好最权威的安装教程依然是官方教程,我们这里将综合优质博客和官方安装教程。
一、下载openc3.4.0和opencv_contrib3.4.0源码
从opencv官网下载opencv3.4.0以及opencv_contrib压缩包:
openCV下载地址
OpenCV_contrib下载地址
将下载的opencv3.4.0及opencv3.4.0_contrib解压,并将opencv3.4.0_contrib的文件夹放到opencv3.4.0的文件夹中。
二、依赖安装
终端运行以下命令
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
其中optional(可选)安装的包中libjasper-dev安装并未成功,网上有方法来解决此问题,终端输入以下命令
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
尝试后依然安装失败,跳过,毕竟本来libjasper-dev就是可选安装的。
三、安装opencv及opencv_contrib
进入opencv3.4.0目录,打开终端,执行命令:
cd opencv-3.4.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake成功后再make一下:
make -j4
make成功之后再执行安装命令:
sudo make install
这样就完成了OpenCV的安装。
四、添加路经
打开终端,执行命令:
sudo vim /etc/ld.so.conf.d/opencv.conf
在opencv.conf文件中添加内容:
/usr/local/lib
之后在终端输入
sudo vim /etc/bash.bashrc
在文件的最末端添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH```
在终端输入
```bash
source /etc/bash.bashrc
使其修改并生效。
五、测试
进入opencv/samples/cpp目录下,有一个opencv自带的例程,我们对此例程进行编译。
cd ../samples/cpp/example_cmake
cmake .
make
./opencv_example
如果出现如下画面就成功了。
问题
make时出错No rule to make target ‘/usr/lib/aarch64-linux-gnu/libGL.so‘解决办法
报错信息提示在路径/usr/lib/aarch64-linux-gnu/下面找不到libGL.so文件。
在终端中打开/usr/lib/aarch64-linux-gnu/路径,查找libGL 相关文件,显示信息如下:
libGL.so libGLEW.so libGLX.so.0
libGL.so.1 libGLEW.so.2.0 libGLX.so.0.0.0
libGL.so.1.0.0 libGLEW.so.2.0.0 libGLX_indirect.so.0
libGLESv1_CM.so libGLU.a libGLX_mesa.so.0
libGLESv2.so libGLU.so libGLX_mesa.so.0.0.0
libGLESv2.so.2 libGLU.so.1 libGLdispatch.so.0
libGLESv2.so.2.0.0 libGLU.so.1.3.1 libGLdispatch.so.0.0.0
首先使用sudo rm libGL.so删掉该路径下的libGL.so文件,
然后使用命令行:sudo ln -s /usr/lib/aarch64-linux-gnu/libGL.so.1 /usr/lib/aarch64-linux-gnu/libGL.so,将libGL.so.1与libGL.so关联起来。
再次运行sudo make 命令,编译通过。
该解决方法的本质就是在你的设备中找到libGL.so相关的文件,使得它与报错提示信息中’/usr/lib/aarch64-linux-gnu/libGL.so’的文件关联起来,
有可能你的libGL.so相关文件不在/usr/lib/aarch64-linux-gnu/文件夹下面,很多帖子中提到的libGL.so相关文件在/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2中,根据自己的实际情况来确定
编译我自己的程序时遇到错误:Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found.
网上有人说这不是因为我们编写的程序有误,而是NVIDIA的32.3.1image自带的是opencv4版本,把opencv命名成了opencv4。
修改方法:网上有人说需修改上述路径中的cv_bridgeconfig.cmke文件,将100行附近的两个opencv改成opencv4即可(注意,只需要改动单独一个的opencv,前面有连字符的opencv不需要改动)
注意:如果jetson的版本自带的opencv是3版本,可能不会出现此问题
但是我尝试后会出现其他问题,因此我将cv_bridgeconfig.cmke文件,将opencv的路径‘/usr/include/opencv’ 改为“/usr/local/include/opencv”,成功编译。
参考:
https://blog.youkuaiyun.com/CQQ1021114542/article/details/115405798?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-11.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-11.control
https://blog.youkuaiyun.com/qq_38236355/article/details/88864023
https://blog.youkuaiyun.com/qq_41080854/article/details/88609795