我和jetson-Nano的故事(10)——安装OpenCV3.2.0

1. 仓库地址

2. cmake-gui安装

安装指令

csharp 复制代码
sudo apt-get install cmake-qt-gui

如果安装过程中入到下面的问题

可以按照以下方法解决

c 复制代码
sudo apt --fix-broken install
sudo apt clean  
sudo apt update

一旦你解决了依赖关系问题,就可以尝试重新安装 cmake-qt-gui

csharp 复制代码
sudo apt-get install cmake-qt-gui

3.编译安装

将压缩包解压并进入文件夹,把opencv_contrib-3.2.0放到opencv-3.2.0文件夹中,创建build文件夹

cpp 复制代码
cd opencv-3.2.0
mkdir build

卸载opencv4.1.1

cpp 复制代码
sudo apt-get remove libopencv*

3.1 编译报错

3.1.1 替换下载地址

由于网络环境原因,cmake过程中部分文件会因无法链接到下载地址导致cmake失败。

我们先行替换部分文件下载地址。

3.1.1.1 <boostdesc_bgm.i> 相关文件下载失败

打开终端,输入以下内容打开对应cmake文件:

cpp 复制代码
sudo gedit ~/OpenCV/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_boostdesc.cmake

将其中的raw.githubusercontent.com修改为raw.staticdn.net,保存并关闭gedit编辑器。

3.1.1.2 <vgg_generated_xxx.i> 相关文件下载失败

打开终端,输入以下内容,打开对应cmake文件:

cpp 复制代码
sudo vim ~/OpenCV/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake

将其中的raw.githubusercontent.com修改为raw.staticdn.net,保存并关闭gedit编辑器。

3.1.2 OpenCV编译出现 CMake Error: CUDA_nppi_LIBRARY (ADVANCED)


原因解析:

cuda10不再支持2.0架构

解决方法:

第一步:在 opencv-3.2.0/cmake 文件夹下找到 FindCUDA.cmake 文件,对其进行修改

cpp 复制代码
cd /home/zqzy/software/opencv-3.2.0/cmake
sudo vim FindCUDA.cmake

1)找到行

cpp 复制代码
find_cuda_helper_libs(nppi)

改为

cpp 复制代码
  find_cuda_helper_libs(nppial)
  find_cuda_helper_libs(nppicc)
  find_cuda_helper_libs(nppicom)
  find_cuda_helper_libs(nppidei)
  find_cuda_helper_libs(nppif)
  find_cuda_helper_libs(nppig)
  find_cuda_helper_libs(nppim)
  find_cuda_helper_libs(nppist)
  find_cuda_helper_libs(nppisu)
  find_cuda_helper_libs(nppitc)

2)找到行

cpp 复制代码
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")

改为

cpp 复制代码
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")

3)找到行

cpp 复制代码
unset(CUDA_nppi_LIBRARY CACHE)

改为

cpp 复制代码
unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)

第二步: 在 opencv-3.2.0/cmake 文件夹下找到文件 OpenCVDetectCUDA.cmake,对其进行修改

cpp 复制代码
cd /home/agilex/opencv3/opencv-3.2.0/cmake
 
sudo gedit OpenCVDetectCUDA.cmake

修改以下几行

cpp 复制代码
 ...
  set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Fermi")
    set(__cuda_arch_bin "2.0")
  elseif(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")
  ...

改为

cpp 复制代码
  ...
  set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")
  elseif(CUDA_GENERATION STREQUAL "Maxwell")
    set(__cuda_arch_bin "5.0 5.2")
  ...

第三步: Cuda9或者Cuda10及以后的版本 中有一个单独的halffloat(cuda_fp16.h)头文件,也应该被包括在opencv的目录里

将头文件cuda_fp16.h添加至 opencv/modules/cudev/include/opencv2/cudev/common.hpp

cpp 复制代码
cd /home/agilex/opencv3/opencv-3.2.0/modules/cudev/include/opencv2/cudev
 
sudo gedit common.hpp

即在common.hpp中添加

cpp 复制代码
#include <cuda_fp16.h>

重新生成即可

3.1.3 查看 CUDA 版本:nvcc -V 报错:bash: nvcc: 未找到命令

正常情况下,在安装完jetpack 系统之后,jetson nano会自动安装好cuda,

但是却提示报错

原因就是没有配置环境变量

解决办法

此时切换到 ~ 目录下: cd ~ ;

然后打开 .bashrc 文件:

cpp 复制代码
cd ~ 
sudo  vim .bashrc 

接着按 i 键,进入编辑状态;

再接着在文件的末尾添加下面三行代码:

cpp 复制代码
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda

紧接着,按 Esc 键,然后输入冒号 ,再按下 wq! (表示强制写入并退出)!

最后一步,也是容易忘记的一步,一定要 source 一下这个文件:

cpp 复制代码
source .bashrc

3.2 配置OpenCV

打开终端,输入:

cpp 复制代码
#来到build文件夹
cd ~/opencv3/opencv-3.2.0/build
#执行cmake
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="7.2" -D ENABLE_PRECOMPILED_HEADERS=OFF  -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv3/opencv_contrib-3.2.0/modules ..

不报错的话会输出以下信息

编译安装OpenCV

cpp 复制代码
#来到build文件夹
sudo make -j4
sudo make install

4.OpenCV环境配置

创建opencv.conf文件,打开终端,输入:

cpp 复制代码
sudo gedit /etc/ld.so.conf.d/opencv.conf

在文件中添加以下内容后保存并关闭gedit编辑器:

cpp 复制代码
/usr/local/lib

使opencv配置文件生效

打开终端,输入:

cpp 复制代码
sudo ldconfig

配置bash环境变量

打开.bashrc文件,在终端输入:

cpp 复制代码
sudo gedit ~/.bashrc

在文件的最末尾加入:

cpp 复制代码
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

保存并关闭gedit编辑器。

在终端输入:

cpp 复制代码
source ~/.bashrc

验证opencv是否安装成功:

打开终端,输入:

cpp 复制代码
pkg-config --modversion opencv

若安装成功,终端应输出:

cpp 复制代码
3.2.0

5.参考资料

  1. Jetson Nano 安装 OpenCV 3.2.0 详细步骤
  2. OpenCV编译出现 CMake Error: CUDA_nppi_LIBRARY (ADVANCED)
相关推荐
China_Yanhy19 分钟前
动手学大模型第一篇学习总结
人工智能
空间机器人30 分钟前
自动驾驶 ADAS 器件选型:算力只是门票,系统才是生死线
人工智能·机器学习·自动驾驶
C+++Python35 分钟前
提示词、Agent、MCP、Skill 到底是什么?
人工智能
小松要进步40 分钟前
机器学习1
人工智能·机器学习
泰恒1 小时前
openclaw近期怎么样了?
人工智能·深度学习·机器学习
KaneLogger1 小时前
从传统笔记到 LLM 驱动的结构化 Wiki
人工智能·程序员·架构
tinygone1 小时前
OpenClaw之Memory配置成本地模式,Ubuntu+CUDA+cuDNN+llama.cpp
人工智能·ubuntu·llama
正在走向自律1 小时前
第二章-AIGC入门-AIGC工具全解析:技术控的效率神器,DeepSeek国产大模型的骄傲(8/36)
人工智能·chatgpt·aigc·可灵·deepseek·即梦·阿里通义千问
轩轩分享AI1 小时前
DeepSeek、Kimi、笔灵谁最好用?5款网文作者亲测的AI写作神器横评
人工智能·ai·ai写作·小说写作·小说·小说干货
Aevget2 小时前
基于嵌入向量的智能检索!HOOPS AI 解锁 CAD 零件相似性搜索新方式
人工智能·hoops·cad·hoops ai·cad数据格式