网站的外部推广,网站设计网站源码,现在的网站是用什么软件做的,汽车之家网页一、实验目的
掌握OpenCV视频解码的流程#xff0c;对比和FFMPEG的区别。
二、实验内容
搭建实验开发环境#xff0c;编译并运行解码程序#xff0c;对编码后的视频码流通过OpenCV进行解码。
三、开发环境
开发主机#xff1a;Ubuntu 20.04.6 LTS
硬件#xff1a;算…一、实验目的
掌握OpenCV视频解码的流程对比和FFMPEG的区别。
二、实验内容
搭建实验开发环境编译并运行解码程序对编码后的视频码流通过OpenCV进行解码。
三、开发环境
开发主机Ubuntu 20.04.6 LTS
硬件算能SE5
四、实验器材
开发主机 云平台或SE5硬件
五、实验过程与结论
OpenCV解码原理与流程
OpenCV也支持对视频进行解码OpenCV内部对FFMPEG进行封装实际还是调用FFMPEG接口。
但OpenCV对外提供了简易的接口可以快速调用实现视频的解码。
OpenCV中用mat这种数据结构来表示图片比如利用OpenCV通过下面方法即可快速实现对视频文件的解码
//初始化VideoCapture类
VideoCapture cap;//打开文件或者摄像头或者某个RTSP连接
cap.open(argv[1], CAP_FFMPEG, card); //读取视频帧存入image中
Mat image;
cap.read(image);
OpenCV也支持通过VideoCapture类接口设置一些解码参数比如输出的格式类型、长宽等
//设置输出的高和宽
cap.set(CAP_PROP_FRAME_HEIGHT, (double)h);
cap.set(CAP_PROP_FRAME_WIDTH, (double)w);//设置输出为YUV数据格式
cap.set(cv::CAP_PROP_OUTPUT_YUV, PROP_TRUE);
需要注意的是OPENCV由于内部采用了硬件加速处理如果需要对处理后的图片或者数据进行CPU处理如保存文件等操作需要执行内存同步操作参考如下
//内存同步到CPU
bmcv::downloadMat(image);
for (int i 0; i image.avRows(); i) { fwrite((char*)image.avAddr(0)i*image.avStep(0),1,image.avCols(),dumpfile);
}
for (int i 0; i image.avRows()/2; i) {fwrite((char*)image.avAddr(1)i*image.avStep(1),1,image.avCols()/2,dumpfile);
}
for (int i 0; i image.avRows()/2; i) {fwrite((char*)image.avAddr(2)i*image.avStep(2),1,image.avCols()/2,dumpfile);
}
实验过程
具体的实验过程与上一实验过程类似这里不做赘述。