使用Opencv在YUV420P数据上添加时间的简易方法

YUV数据是一种通用的图像格式,当我们从拿到YUV数据后如果需要在YUV数据中添加文字,可以使用OpenCV的Mat类型进行保存,在mat类型中使用putText添加自己想要的文字

下列代码为在yuv数据中添加当前时间的代码

// yuv数据格式为 uint8_t *data,宽 高为 w,h
cv::Mat yMat(h, w, CV_8UC1,data);
auto currentTime = std::chrono::system_clock::now();
time_t raw_time = std::chrono::system_clock::to_time_t(currentTime);
struct tm *timeinfo = std::localtime(&raw_time);
std::stringstream ss;
ss << std::put_time(timeinfo,"%Y-%m-%d %H:%M:%S")
std::string time String = ss.str();
cv::putText(yMat,timeString,cv::Point(yMat.cols - 200, 20), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(255, 255, 255), 1);

这段代码中,并没有将yuv的整个数据存储进来,而是只存了Y分量,如果要存整个YUV则需要将h变成h+h/2,这是yuv格式的问题,具体请参看YUV相关介绍。
此代码使用的是cv::Mat的引用构造,没有占用额外的空间进行复制拷贝,修改了yMat的同时也修改了yuv源数据。

为什么可以这样做?

因为yuv数据中的y分量就代表的是灰度值,直接在灰度值上进行修改,就可以很便利地做到文字的添加,同时还不额外消耗资源。

网络上大多数拿到yuv数据都是转成了rgb的格式,然后再用rgb数据进行一些修改,今天看到了OpenCV的mat构造是引用的,故试了一下这种方式去修改,发现行得通,于是分享出来供大家参考。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值