Raspberry Pi 4使用Opencv更新

本文仅记录个人在使用树莓派4的opencv时的总结。

0. 主要参考

https://blog.csdn.net/tfb760/article/details/90607234

1. 一些新得

这次安装中一些新想到的,故此补充。

  1. 在执行CMAKE这一步时,取消了一些编译。

    cmake -D CMAKE_BUILD_TYPE=RELEASE \
                -D CMAKE_INSTALL_PREFIX=/usr/local \	//system wide installation. 原来:$cwd/installation/OpenCV-"$cvVersion" \
                -D INSTALL_C_EXAMPLES=OFF\	//原来为ON
                -D INSTALL_PYTHON_EXAMPLES=OFF\	//原来为ON
                -D WITH_TBB=ON \
                -D WITH_V4L=ON \
                -D OPENCV_PYTHON3_INSTALL_PATH=$cwd/OpenCV-$cvVersion-py3/lib/python3.5/site-packages \
            -D WITH_QT=OFF\	//原来为ON
            -D WITH_OPENGL=OFF\	//原来为ON
            -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
            -D BUILD_EXAMPLES=OFF\	//原来为ON
    

    认为这些Build没有用,故取消;

  2. 在执行下一步make -j4之前,需要修改swap空间大小,否则编译到100%时卡死,鼠标都动不了

    sudo vim /etc/dphys-swapfile
    CONF_SWAPSIZE=100 改成 1024
    # 重启交换服务
    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    
  3. 在执行make install之前,确定pi4没有安装任何opencv的库。此时查找opencv关键字:

    sudo find / -iname "*opencv*"
    

    只能在创建的下载路径和build中找到。同时在

    /usr/lib/python2.7/
    /usr/lib/python3/
    

    下找到有些相关文件,

  4. dmtx库需要用新的环境进行编译,否则可能版本不对,提示:
    libdmtx.a: file not recognized: file format not recognized.
    且编译后的结果存在了
    /usr/local/lib 下

  5. 在make时,出现:

    warning: libImath-2_2.so.12, needed by dir/libopencv_highgui.so, not found, (try using -rpath or rpath-link)
    warning: libIex-2_2.so.12, needed by dir/libopencv_highgui.so, not found......
    

    等一些列找不到。但查找opencv安装过程,已经装过了相关组件。
    通过find寻找,能够在/usr/lib/arm-linux-nnueabihif下找到相关组件,但是版本与warning的不同。可见直接将opencv2的库搬过来是不行的。还是需要使用opencv4对应的依赖链接库。
    注:后来发现,在执行cmake xxx时,自动检查了相关依赖项.so的版本,所以采用opencv4的安装依赖时,不可以使用旧的opencv2生成的相应的so进行链接。

2. 关于CMake的进一步理解

写了一个小程序,包含opencv_core库,但代码中并没有引用相关函数,此时可以正常编译,但运行时报错:
cannot open shared object file

原因是并没有找到相应的.so文件,通过ldd xxx可以看出没有link到相应的库。
查询,“You have to distinguish between finding so’s at compile-time and at run-time. ”,在运行时,会按照路径寻找相应的链接库,会优先在LD_LIBRARY_PATH寻找,后再PATH下寻找相应链接库,故将众多.so文件安装目录添加到环境变量中去。
解决方案:(来自网络)--------------

方法一: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是退出当前终端后就失效
方法二: 修改~/.bashrc或 ~/.bash_profile或系统级别的/etc/profile

  1. 在其中添加例如export LD_LIBRARY_PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH
  2. source .bashrc (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)
    方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找,
  3. /etc/ld.so.conf下面加一行/usr/local/mysql/lib
  4. 保存后执行 ldconfig 生效
    (ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)
    方法三设置稍微麻烦,好处是比较不受用户的限制。
    由于安装路径将众多的.so库安装到了/usr/local/libs,所以加上这个路径,可以成功运行。

同时被坑的很惨的是,拷贝opencvcv2的代码到安装opencv4后,虽然重新修改了动态链接库的路径,成功链接,但未修改头文件,导致头文件与对应的链接库不匹配。所以需要重新将opencv4生成的include文件包含到工程中。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值