国内外创意网站欣赏,个人网页设计作品简单,网络策划案怎么写,邢台推广网站建设电话文章目录前言1.PercipioViewer软件操作步骤1.1 加载录制的bag文件1.2 设置视频播放速度2.C代码解析bag文件2.1 运行编译后的Demo3.常见问题FAQ3.1 编译过程中报错前言 Percipio Viewer 软件支持录制相机采集图像时的视频。录制视频过程中#xff0c;支持调整部分参数#xff…文章目录前言1.PercipioViewer软件操作步骤1.1 加载录制的bag文件1.2 设置视频播放速度2.C代码解析bag文件2.1 运行编译后的Demo3.常见问题FAQ3.1 编译过程中报错前言Percipio Viewer 软件支持录制相机采集图像时的视频。录制视频过程中支持调整部分参数不支持关闭/开启数据流。前提条件根据录制内容开启对应数据流。1.PercipioViewer软件操作步骤1.1 加载录制的bag文件1.2 设置视频播放速度主要有0.2X0.5X1X1.5X和2X五种速度可以设置。2.C代码解析bag文件具体解析bag文件的代码可从如下链接下载git clone gitgitee.com:jet_zou/percipio_viewer_stream_decode.git详细的代码如下/* * Description: * Author: zxy * Date: 2023-09-08 09:07:05 * LastEditors: zxy * LastEditTime: 2024-04-16 18:27:04 */#includeutils.hpp#definePERCIPIO_DPETH_RENDER_ENABLE#ifdefPERCIPIO_DPETH_RENDER_ENABLE#includeDepthRender.hpp#endif#pragmapack(1)structStreamSize{int32_tm_width;int32_tm_height;};structStreamInfo{floatf_sacle_unit;StreamSize depthSize;StreamSize colorSize;StreamSize irLeftSize;StreamSize irRightSize;int32_tReserved[10];};structRecordInfo{uint32_trecord_info_version;TY_DEVICE_BASE_INFO dev_info;int32_tdepthStreaming;int32_tcolorStreaming;int32_tlIrStreaming;int32_trIrStreaming;int32_tallComps;//TY_CAMERA_CALIB_INFO depth_calib_info;TY_CAMERA_CALIB_INFO color_calib_info;chartycam_version[32];uint64_trecord_duration_start;uint64_trecord_duration_stop;};#pragmapack()#defineIMAGE_HEADER_SIZE(4096)staticintGetFileSize(constchar*file_name,uint64_t*file_byte_size){FILE*fp;if(!(fpfopen(file_name,rb))){return(-1);}#ifdefined(_WIN32)||defined(_WIN64)#if_MSC_VER1400if(_fseeki64(fp,(uint64_t)(0),SEEK_END)){fclose(fp);return(-1);}*file_byte_size_ftelli64(fp);#else#errorVisual Studio version is less than8.0(VS2005)!#endif#elseif(fseeko(fp,(uint64_t)(0),SEEK_END)){fclose(fp);return(-1);}*file_byte_sizeftello(fp);#endiffclose(fp);return0;}staticinlineintparseImage(constTY_IMAGE_DATAimage,cv::Mat*pDepth,cv::Mat*pLeftIR,cv::Mat*pRightIR,cv::Mat*pColor){if(pDepthimage.componentIDTY_COMPONENT_DEPTH_CAM){if(image.pixelFormatTY_PIXEL_FORMAT_XYZ48)*pDepthcv::Mat(image.height,image.width,CV_16SC3,image.buffer).clone();else*pDepthcv::Mat(image.height,image.width,CV_16U,image.buffer).clone();}elseif(pLeftIRimage.componentIDTY_COMPONENT_IR_CAM_LEFT)parseIrFrame(image,pLeftIR);elseif(pRightIRimage.componentIDTY_COMPONENT_IR_CAM_RIGHT)parseIrFrame(image,pRightIR);elseif(pColorimage.componentIDTY_COMPONENT_RGB_CAM)parseColorFrame(image,pColor);elsereturn-1;return0;}intmain(intargc,char*argv[]){if(argc!2){printf(Need to specify a file!\n);return-1;}uint64_tfile_length;interror_codeGetFileSize(argv[1],file_length);if(error_code0){printf(Could not get file size!\n);return-1;}FILE*fpfopen(argv[1],rb);if(fpNULL){printf(Failed to open file!\n);return-1;}std::vectorcharheader_buffer(IMAGE_HEADER_SIZE);size_t cntfread(header_buffer[0],1,IMAGE_HEADER_SIZE,fp);if(cntIMAGE_HEADER_SIZE){printf(File format error!\n);fclose(fp);return-1;}RecordInfo*pBagInfo(RecordInfo*)header_buffer[0];StreamInfo*pStreamInfo(StreamInfo*)(header_buffer[0]sizeof(RecordInfo));printf(tycam version : %s\n,pBagInfo-tycam_version);printf(deice sn : %s\n,pBagInfo-dev_info.id);booldepthStreamingpBagInfo-depthStreaming;boolcolorStreamingpBagInfo-colorStreaming;boollIrStreamingpBagInfo-lIrStreaming;boolrIrStreamingpBagInfo-rIrStreaming;boolcomponentpBagInfo-allComps;int32_tstream_cnt_per_frame0;//stream_sizeif(depthStreaming)stream_cnt_per_frame;if(colorStreaming)stream_cnt_per_frame;if(lIrStreaming)stream_cnt_per_frame;if(rIrStreaming)stream_cnt_per_frame;uint64_trecord_durationpBagInfo-record_duration_stop-pBagInfo-record_duration_start;std::vectorcharstream_header(sizeof(int32_t)*5);uint64_tstream_lengthfile_length-IMAGE_HEADER_SIZE;uint32_tframe_size0;for(int32_ti0;istream_cnt_per_frame;i){cntfread(stream_header[0],sizeof(int32_t)*5,1,fp);frame_size((int32_t*)(stream_header[0]))[4];fseek(fp,((int32_t*)(stream_header[0]))[4],SEEK_CUR);}uint32_tplayback_frame_rate,playback_total_frames;uint64_tplayback_durationrecord_duration*1000*1000;if(record_duration1000){playback_frame_ratestatic_castuint32_t((stream_length/(frame_sizesizeof(int32_t)*5*stream_cnt_per_frame))/(record_duration/1000));playback_total_framesstatic_castuint32_t(stream_length/(frame_sizesizeof(int32_t)*5*stream_cnt_per_frame));}else{playback_frame_rate1;playback_total_frames1;}fseek(fp,IMAGE_HEADER_SIZE,SEEK_SET);#ifdefPERCIPIO_DPETH_RENDER_ENABLEDepthRender depthViewer;#endifuint64_tstart_time0;uint64_tend_time0;TY_IMAGE_DATA image;std::vectorcharframebuffer[4];while(true){start_timegetSystemTime();if(feof(fp)){printf(Repeat!\n);fseek(fp,IMAGE_HEADER_SIZE,SEEK_SET);}fread(stream_header[0],sizeof(int32_t)*5,1,fp);image.componentID((int32_t*)(stream_header[0]))[0];image.width((int32_t*)(stream_header[0]))[1];image.height((int32_t*)(stream_header[0]))[2];image.pixelFormat((int32_t*)(stream_header[0]))[3];image.size((int32_t*)(stream_header[0]))[4];if(image.componentIDTY_COMPONENT_DEPTH_CAM){if(framebuffer[0].size()image.size)framebuffer[0].resize(image.size);fread(framebuffer[0][0],image.size,1,fp);image.bufferframebuffer[0][0];}elseif(image.componentIDTY_COMPONENT_RGB_CAM){if(framebuffer[1].size()image.size)framebuffer[1].resize(image.size);fread(framebuffer[1][0],image.size,1,fp);image.bufferframebuffer[1][0];}elseif(image.componentIDTY_COMPONENT_IR_CAM_LEFT){if(framebuffer[2].size()image.size)framebuffer[2].resize(image.size);fread(framebuffer[2][0],image.size,1,fp);image.bufferframebuffer[2][0];}elseif(image.componentIDTY_COMPONENT_IR_CAM_RIGHT){if(framebuffer[3].size()image.size)framebuffer[3].resize(image.size);fread(framebuffer[3][0],image.size,1,fp);image.bufferframebuffer[3][0];}else{printf(Invalid component id!\n);exit(-1);}cv::Mat depth,leftIR,rightIR,color;parseImage(image,depth,leftIR,rightIR,color);if(!depth.empty()){#ifdefPERCIPIO_DPETH_RENDER_ENABLEcv::Mat dep_renderdepthViewer.Compute(depth);if(!dep_render.empty())cv::imshow(depth,dep_render);#elsecv::imshow(depth,depth*15);#endif}if(!leftIR.empty())cv::imshow(leftIR,leftIR);if(!rightIR.empty())cv::imshow(rightIR,rightIR);if(!color.empty())cv::imshow(color,color);intkeycv::waitKey(1);if((key0xff)q)break;end_timegetSystemTime();floatdelt((playback_duration/(uint64_t)playback_total_frames)/(1000*1000)-(end_time-start_time))/(stream_cnt_per_frame);if(delt0)MSleep(static_castuint32_t(delt));}fclose(fp);printf(Main done!\n);return0;}2.1 运行编译后的Demo使用Cmake-gui界面编译完成后使用VisualStudio软件生成解决方案后生成对应的.exe文件之后使用如下命令即可解析.bag文件。.\ decode test.exe.\bag名字3.常见问题FAQ3.1 编译过程中报错在使用Cmake进行编译时需要引入Opencv路径