Opencv Jetson运行失败

目录

1. 问题:

2. 环境

3. 代码

3. 怀疑方向

4. 方向错误(新现象)


1. 问题:

    在一个大型的项目里面,使用了opencv,且自己编译的时候添加了opencv cuda的支持,且编译的是libopencv_world,在一个比较充足资源的机器是能正常运行的:

2. 环境

    内存:32G

    显存:16G或者8G

    但是在Jetson平台只要调用opencv的接口,算法程序就卡住,其他线程运行OK,怀疑是opencv库太大导致的,但是opencv不是使用到哪个函数,才把相应的库加载到物理内存吗?

description: Computer
    product: NVIDIA Jetson Xavier NX Developer Kit
    serial: 1424621088797
    width: 64 bits
    capabilities: smp cp15_barrier setend swp tagged_addr_disabled

Jetson:

    内存:7G(内存显存共用)

3. 代码

仍然是上面的Jetson环境,自己写一个小的Demo,使用opencv库,仍然是上面的libopencv_world库:

cmake_minimum_required(VERSION 3.16)
project(demo)

set(DEPEND_HEADER_DIR /media/workspace/liuyb/opencv4.5.5/include)

set(DEPEND_LIB_DIR /media/workspace/liuyb/opencv4.5.5/arm)
#set(DEPEND_LIB opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
set(DEPEND_LIB opencv_world)

LINK_DIRECTORIES(/media/workspace/liuyb/opencv4.5.5/arm)

add_executable (demo main.cpp)

target_include_directories(demo  PUBLIC ${DEPEND_HEADER_DIR})
target_link_libraries(demo PUBLIC ${DEPEND_LIB})
#include <iostream>
#include "opencv2/opencv.hpp"
#include <vector>

using namespace std;

int main()
{
    vector<uint8_t> data(5000 * 5000, 128);

    cv::Mat cv_src = cv::Mat(5000, 5000, CV_8UC1, data.data());
    cv::Mat cv_dst;
    cv::resize(cv_src, cv_dst, {5000 * 2, 5000});

    cv::imwrite("dst.tif", cv_dst);
    return 0;
}

3. 怀疑方向

编译后,查看应用程序的依赖库:

 

 

 感觉所有的库都显示依赖了

strace demo查看,好像也将一些没有用的给映射进来了,下面是映射的所有库吗

这个简单的Demo是能正常运行的,但是那个大型的程序,运行失败,那个程序运行气起来非常消耗内存,是不是因为剩余的可用内存太小,所以导致前面的问题。

 上面是没有使用opencv时的内存情况

将项目中使用libopencv_world的位置,修改为具体的三个库:

set(DEPEND_LIB opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)

运行,发现还是不行,可是这三个库的大小加起来也才6M左右,为什么不行呢?

4. 方向错误(新现象)

    前面开始以为是内存不足,但是在另外一台内存很充足(32G)的机器上,运行同样出问题,之前内存很小的平台是无法进行gdb的,这个32G平台可以GDB,且死在了cv::resize的一个cv::Mat初始化的位置

        后来发现,jeston平台是自带opencv的,版本是4.2.0,使用系统自带的opencv库,运行时OK的,但是自己编译的版本(自己本来就是在jetson平台上编译的)就不行,奇怪。

        发现另外一个扩展库IMT.so,也用到的opencv,不过在好的平台(自己编译opencv能正常运行的平台)发现这个扩展库IMT.so和自己的库使用的opencv是同一个版本的,但是在jetson平台,IMT.so使用的是4.2.0版本的库文件,自己使用的仍然是4.5.5的

5. 原因

        根据4中查看到的异常现象,两个库使用的opencv版本不一致,会不会导致这个问题,尝试将库版本统一成4.2.0的(自己编译),为了排除干扰,将系统中的opencv库去掉,编译运行,OK

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值