引言

Jetson Xavier NX提供了Jpeg硬解的能力,其在Multimedia APIs中介绍了如何使用Jpeg decode,具体流程如下,示例代码可以在 /usr/src/jetson_multimedia_api/samples/06_jpeg_decode中找到。

用例

以下代码实现了如何利用硬解将Jpeg格式图片解码到cv的Mat格式,输入是四个ROS compressedImg 消息(Jpeg格式压缩),由于需要内存拷贝和转换,效率并不高,且需要cv::cvtcolor(),也耗费CPU

主要步骤

1. 将消息数据读入char* buffer:`unsigned char *in_buffer = const_cast<uchar *>(Camera_image.data.data())`
2. 解码器解码:`jpegdec->decodeToFd(fd[i], in_buffer, in_file_size, pixfmt, width, height) < 0)`
3. 解码后的数据通过buffer转换拷贝到CPU,格式为RGBA(Nvidia论坛说只能转换到这个格式,有待考证和改进)
4. 再通过opencv转换成BGR的Mat

依赖

头文件:

  • helper_cuda.h
  • helper_string.h
  • nvbuf_utils.h
  • nvJPEG.hpp
  • NvJpegDecoder.h
  • 以上可能不完全,可包含/usr/src/jetson_multimedia_api/include//usr/local/cuda-10.2/targets/aarch64-linux/include/

cpp:

  • NvBuffer.cpp
  • NvElement.cpp
  • NvElementProfiler.cpp
  • NvLogging.cpp
  • NvJpegDecoder.cpp

代码

#include "NvJpegDecoder.h"
#include "nvbuf_utils.h"#define WIDTH 1280
#define HEIGHT 720int main(int argc, char* argv[]){NvJPEGDecoder *jpegdec;uint64_t in_file_size;unsigned char *in_buffer;jpegdec = NvJPEGDecoder::createJPEGDecoder("jpegdec");const sensor_msgs::CompressedImageConstPtr Camera_msgs[4] = {Camera_msg, Camera_msg1, Camera_msg2, Camera_msg3};// Decode to YUV bufferuint32_t width, height, pixfmt;int fd[4] = {0};  // YUV DMA buffer after decodeint  nvbuffer_ABGR_fd[4] = {0};  // One plane ABGR DMA bufferNvBufferCreateParams input_params = {0};input_params.width = WIDTH;input_params.height = HEIGHT;input_params.layout = NvBufferLayout_Pitch;input_params.colorFormat = NvBufferColorFormat_ABGR32;input_params.nvbuf_tag = NvBufferTag_NONE;for (int i = 0; i < 4; i++){const sensor_msgs::CompressedImage Camera_image = *Camera_msgs[i];in_file_size = Camera_image.data.size();in_buffer = const_cast<uchar *>(Camera_image.data.data());if (jpegdec->decodeToFd(fd[i], in_buffer, in_file_size, pixfmt, width, height) < 0)ROS_ERROR("Cannot decode MJPEG");/* Convert the decoded buffer to ABGR */NvBufferCreateEx(&nvbuffer_ABGR_fd[i], &input_params);  /* Init the NvBufferTransformParams */NvBufferTransformParams transParams;memset(&transParams, 0, sizeof(transParams));transParams.transform_flag = NVBUFFER_TRANSFORM_FILTER;transParams.transform_filter = NvBufferTransform_Filter_Smart;if (-1 == NvBufferTransform(fd[i], nvbuffer_ABGR_fd[i], &transParams))ROS_ERROR("Failed to convert the buffer");void *pdata = NULL;NvBufferParams params;NvBufferGetParams(nvbuffer_ABGR_fd[i], &params);NvBufferMemMap(nvbuffer_ABGR_fd[i], 0, NvBufferMem_Read, &pdata);NvBufferMemSyncForCpu(nvbuffer_ABGR_fd[i], 0, &pdata);// std::cout<<params.pitch[0];cv::Mat imgbuf = cv::Mat(HEIGHT, WIDTH, CV_8UC4, pdata, params.pitch[0]);cv::Mat display_img;cvtColor(imgbuf, display_img, CV_RGBA2BGR);// cv::imshow("img", display_img);// cv::waitKey(0);NvBufferMemUnMap(nvbuffer_ABGR_fd[i], 0, &pdata);}for (int i = 0; i < 4; i++){NvBufferDestroy(nvbuffer_ABGR_fd[i]);}delete jpegdec;
}

对于桌面级GPU可以用 nvJPEG Libraries,Jetson Xavier NX平台没有该库

参考

https://docs.nvidia.com/jetson/l4t-multimedia/l4t_mm_06_jpeg_decode.html

图像处理系列05——Jetson Xavier NX平台JPEG硬解相关推荐

  1. jetson xavier nx平台 Gstreamer tcpserverink延迟问题调试记录1

    1. 前言 试图发送一个视频流与tcp 但得到2-3秒的延迟. 接收到的流有时在一个灰色图像上停止,然后接收到加速帧的突发. 在Jetpack 4.5.1上有一个Jetson NX Xavier de ...

  2. nvidia的jetson系列的方案_NVIDIA Jetson Xavier NX开发者套件主要应用于自主机器边缘计算产品系列...

    NVIDIA副总裁,边缘计算业务总经理Deepu Talla表示:"NVIDIA已在多个行业中创建并优化了大量AI软件.如今,有了云原生技术的加持,我们在嵌入式和机器人领域的客户就能通过高性 ...

  3. Nvidia Jetson篇----Jetson xavier nx 入门系列 各类组件安装

    Jetson xavier nx 入门系列 各类组件安装 一.刷机预装组件版本检查 二.换源 三.安装Jetson-stats管理工具 四.附录 一.刷机预装组件版本检查 1.Jetson版本 刷机版 ...

  4. 性能测评 | Nvidia新品JETSON XAVIER NX与JETSON TX2和JETSON NANO

    转载自:https://www.bilibili.com/read/cv9326598 性能测评 | Nvidia新品JETSON XAVIER NX与JETSON TX2和JETSON NANO 日 ...

  5. Jetson Xavier NX and Jetson AGX Xavier Series启动流程

    文章目录 BootROM BootLoader Components加载程序组成 通用驱动程序框架 Microboot1, MB1 TegraBoot TegraBoot BPMP TegraBoot ...

  6. 使用ubuntu16.04对NVIDIA Jetson Xavier NX使用刷机:两种刷机方式:SD卡镜像法 和 NVIDIA SDK Manager法

    文章目录: 1 NVIDIA Jetson Xavier NX的两种刷机方式 2 使用SD卡镜像法对Jetson Xavier NX刷机的具体步骤 3 使用NVIDIA SDK Manager法对Je ...

  7. NVIDIA Jetson Xavier NX上导入tensorflow报错:AttributeError: module ‘wrapt‘ has no attribute ‘ObjectProxy‘

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 在Jetson Xavier NX上导入tensorflow报错:AttributeError: module 'wra ...

  8. 仅信用卡大小,性能比TX2强15倍,英伟达边缘AI计算新品Jetson Xavier NX

    点击我爱计算机视觉标星,更快获取CVML新技术 晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 英伟达最近发布了Jetson Xavier NX,这是一个用于在无人机.汽车和机器人等边缘 ...

  9. Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)

    Jetson Xavier NX 系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版) 文章目录 Jetson Xavier NX 系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版) ...

最新文章

  1. matlab GUI和simulink参数传递
  2. 前端科普系列(2):Node.js 换个角度看世界,
  3. python去停用词用nltk_使用nltk删除英文停用词
  4. go-elasticsearch: Elastic官方的Go语言客户端
  5. 曲线图绘制软件_OpenFoam离心泵数值仿真及不同CFD软件间对比
  6. mysql多字段分库分表基因码_一文学会常用 MySQL 分库分表方案
  7. 1342.将数字变成0的操作次数
  8. mysql中CONCAT值为空的问题解决办法
  9. 青岛科技大学计算机历年真题,青岛科技大学计算机组成原理补考试卷(计算机)...
  10. java小项目之简单聊天室
  11. 电路设计软件系列教程(五),Protel DXP电路设计软件之设计规则(上)
  12. BP神经网络的MATLAB源码
  13. 2022-2028全球多层共烧基板行业调研及趋势分析报告
  14. Linux命令行与shell脚本(17)--正则表达式
  15. 单片机应用编程技巧---MCU专家答网友问
  16. 成都网络推广浅析怎样让网站的文章能够快速收录?
  17. 诺基亚7原生android,诺基亚7快速上手体验:蔡司镜头回归,原生Android味
  18. prometheus grafana graylog 钉钉告警 短信告警 电话告警系统 PrometheusAlert
  19. vt版本不见了_BIOS问题 我的版本BIOS 找不到 开启 intel vt-x功能
  20. 数据库学习-连接/join

热门文章

  1. Notes 发送失败 提示没有注册类, ClassID: {29131539-2EED-1069-BF5D-00DD011186B7}
  2. Twemproxy – Twitter 开源的 Redis proxy
  3. 互联网快讯:粉笔科技创新推进OMO模式;猿辅导以科技助力教育提质增效;“莆田鞋”注册成功
  4. 计算机研究生怎么研究黑洞,物理学家可能已经找到了一种“解开”陷入黑洞的信息的方法...
  5. js计算数组中的最大值
  6. C语言实验题――圆柱体计算
  7. buuctf-misc-[SWPU2019]神奇的二维码1
  8. html鼠标经过图片轻微左移,CSS——鼠标滑过放大/左移
  9. 计算机名人榜----- 阿兰·麦席森·图灵
  10. bids格式数据中config文件的编写