图像处理系列05——Jetson Xavier NX平台JPEG硬解
引言
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], ¶ms);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硬解相关推荐
- jetson xavier nx平台 Gstreamer tcpserverink延迟问题调试记录1
1. 前言 试图发送一个视频流与tcp 但得到2-3秒的延迟. 接收到的流有时在一个灰色图像上停止,然后接收到加速帧的突发. 在Jetpack 4.5.1上有一个Jetson NX Xavier de ...
- nvidia的jetson系列的方案_NVIDIA Jetson Xavier NX开发者套件主要应用于自主机器边缘计算产品系列...
NVIDIA副总裁,边缘计算业务总经理Deepu Talla表示:"NVIDIA已在多个行业中创建并优化了大量AI软件.如今,有了云原生技术的加持,我们在嵌入式和机器人领域的客户就能通过高性 ...
- Nvidia Jetson篇----Jetson xavier nx 入门系列 各类组件安装
Jetson xavier nx 入门系列 各类组件安装 一.刷机预装组件版本检查 二.换源 三.安装Jetson-stats管理工具 四.附录 一.刷机预装组件版本检查 1.Jetson版本 刷机版 ...
- 性能测评 | Nvidia新品JETSON XAVIER NX与JETSON TX2和JETSON NANO
转载自:https://www.bilibili.com/read/cv9326598 性能测评 | Nvidia新品JETSON XAVIER NX与JETSON TX2和JETSON NANO 日 ...
- Jetson Xavier NX and Jetson AGX Xavier Series启动流程
文章目录 BootROM BootLoader Components加载程序组成 通用驱动程序框架 Microboot1, MB1 TegraBoot TegraBoot BPMP TegraBoot ...
- 使用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 ...
- NVIDIA Jetson Xavier NX上导入tensorflow报错:AttributeError: module ‘wrapt‘ has no attribute ‘ObjectProxy‘
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 在Jetson Xavier NX上导入tensorflow报错:AttributeError: module 'wra ...
- 仅信用卡大小,性能比TX2强15倍,英伟达边缘AI计算新品Jetson Xavier NX
点击我爱计算机视觉标星,更快获取CVML新技术 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 英伟达最近发布了Jetson Xavier NX,这是一个用于在无人机.汽车和机器人等边缘 ...
- Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)
Jetson Xavier NX 系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版) 文章目录 Jetson Xavier NX 系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版) ...
最新文章
- matlab GUI和simulink参数传递
- 前端科普系列(2):Node.js 换个角度看世界,
- python去停用词用nltk_使用nltk删除英文停用词
- go-elasticsearch: Elastic官方的Go语言客户端
- 曲线图绘制软件_OpenFoam离心泵数值仿真及不同CFD软件间对比
- mysql多字段分库分表基因码_一文学会常用 MySQL 分库分表方案
- 1342.将数字变成0的操作次数
- mysql中CONCAT值为空的问题解决办法
- 青岛科技大学计算机历年真题,青岛科技大学计算机组成原理补考试卷(计算机)...
- java小项目之简单聊天室
- 电路设计软件系列教程(五),Protel DXP电路设计软件之设计规则(上)
- BP神经网络的MATLAB源码
- 2022-2028全球多层共烧基板行业调研及趋势分析报告
- Linux命令行与shell脚本(17)--正则表达式
- 单片机应用编程技巧---MCU专家答网友问
- 成都网络推广浅析怎样让网站的文章能够快速收录?
- 诺基亚7原生android,诺基亚7快速上手体验:蔡司镜头回归,原生Android味
- prometheus grafana graylog 钉钉告警 短信告警 电话告警系统 PrometheusAlert
- vt版本不见了_BIOS问题 我的版本BIOS 找不到 开启 intel vt-x功能
- 数据库学习-连接/join
热门文章
- Notes 发送失败 提示没有注册类, ClassID: {29131539-2EED-1069-BF5D-00DD011186B7}
- Twemproxy – Twitter 开源的 Redis proxy
- 互联网快讯:粉笔科技创新推进OMO模式;猿辅导以科技助力教育提质增效;“莆田鞋”注册成功
- 计算机研究生怎么研究黑洞,物理学家可能已经找到了一种“解开”陷入黑洞的信息的方法...
- js计算数组中的最大值
- C语言实验题――圆柱体计算
- buuctf-misc-[SWPU2019]神奇的二维码1
- html鼠标经过图片轻微左移,CSS——鼠标滑过放大/左移
- 计算机名人榜----- 阿兰·麦席森·图灵
- bids格式数据中config文件的编写