RV1126+OPENCV在视频中添加时间戳

一.RV1126+OPENCV在视频中添加时间戳大体流程图

第一个线程是opencv_vi_text_thread 线程,这个线程主要的功能是获取VI原始数据,然后格式化字符串并且转换成string ,并用OPENCV的API把每一帧转换成Mat,转换完之后用putText把字符串写到矩阵里面,最后把处理后的VI视频数据发送到VENC编码器里面。

第二个线程是get_venc_stream_thread它主要是获取H264的VENC码流数据,并且保存到H264文件

为什么要转换成格林威治时间,因为系统没有基础,显示的就是一串字符串,无法显示成年月日时分秒

  • RV1126+OPENCV在视频中添加实时时间戳代码实现

二.代码讲解

2.1. RV1126 模块初始化并启动 VI 工作

上面代码是RV1126模块的初始化,包括VI模块的初始化(RK_MPI_VI_SetChnAttr )、使能VI模块(RK_MPI_VI_EnableChn )、VENC模块的初始化(RK_MPI_VENC_CreateChn )、启动VI工作(RK_MPI_VI_StartStream)。关于这方面的参数设置,我们就不详细说了,因为这方面的内容之前的课程已经详细说过。

2.2. opencv_vi_text_thread线程的讲解

上面是opencv_vi_text_thread线程的主要内容,首先我们要通过RK_MPI_SYS_GetMediaBuffer获取每一帧的VI视频原始数据。

利用OPENCV的Mat构造器把每一帧RV1126的VI视频原始数据转换成矩阵,Mat tmp_img = Mat(HEIGHT, WIDTH, CV_8UC1, RK_MPI_MB_GetPtr(mb));

第一个参数是HEIGHT:1080

第二个参数WIDTH:1920

第三个参数:图像格式CV_8UC1

第四个参数:具体的图像数据RK_MPI_MB_GetPtr(mb)

使用time的时间函数获取系统时间,并用gmtime把当前时间转换成格林威治时间函数

调用sprintf 格式化系统时间的字符串打印:打印需要遵循这种格式("%4d-%2d-%2d %2d:%2d:%2d ", 1900 + p->tm_year(这里的年份需要加上1900,这是由于当前系统时间的年份都是从1900开始算起,所以真实年份都需要加上1900), 1+p->tm_mon(gmtime返回的月份是从0开始,换言之就是第一个月对应的索引值是0而不是1,所以我们要得到真正的月份都需要加1),p->tm_mday(日的输出,正常输出就行),8 + p->tm_hour(由于格林威治获取的小时和北京时间有8个小时的时差,因此我们要获取当前的本地时间需要+8小时才能够得到真实的小时),p->tm_min(分钟的输出,正常输出),p->tm_sec(输出秒数)。

然后再调用putText把时间戳的字符串,叠加到OPENCV的矩阵上面,具体的实现cv::putText(tmp_img, date_text, origin, font_face, font_scale, cv::Scalar(0, 0, 0), thickness, 8, 0);

做完上述步骤后,把每一帧经过处理后的VI原始数据发送到H264的VENC编码器,调用的API 将数据发送到VENC模块

2.3. get_venc_stream_thread 线程的讲解

上面是get_venc_stream_thread 的具体实现,在这个线程里面要通过RK_MPI_SYS_GetMediaBuffer 获取每一帧H264的编码数据,然后用fwrite写入,具体的实现如mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, 0, -1);

结果:

上面这张图就是在RV1126的视频数据里面添加时间字符串,并把字符串放在画面中间。

这里要注意的一点,需要用date去修改板子日期,因为板子默认是1970的时间,如:

date -s "2024-1-27 12:15:35"

相关推荐
CodeShare7 分钟前
某中心将举办机器学习峰会
人工智能·机器学习·数据科学
那就摆吧23 分钟前
U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?
人工智能·神经网络·cnn·u-net·医学图像
深度学习实战训练营34 分钟前
中英混合的语音识别XPhoneBERT 监督的音频到音素的编码器结合 f0 特征LID
人工智能·音视频·语音识别
WADesk---瓜子42 分钟前
用 AI 自动生成口型同步视频,短视频内容也能一人完成
人工智能·音视频·语音识别·流量运营·用户运营
星环科技TDH社区版1 小时前
AI Agent 的 10 种应用场景:物联网、RAG 与灾难响应
人工智能·物联网
时序之心1 小时前
ICML 2025 | 深度剖析时序 Transformer:为何有效,瓶颈何在?
人工智能·深度学习·transformer
非凡ghost1 小时前
Wondershare Repairit:专业的视频修复工具
音视频·生活·软件需求
希艾席帝恩1 小时前
拥抱智慧物流时代:数字孪生技术的应用与前景
大数据·人工智能·低代码·数字化转型·业务系统
Bar_artist1 小时前
离线智能破局,架构创新突围:RockAI与中国AI的“另一条车道”
大数据·人工智能
双向331 小时前
高性能MCP服务器架构设计:并发、缓存与监控
人工智能