本文主要是介绍【OpenCV】正确创建用于保存YUV420P格式的cv::Mat,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【目录】郭老二博文之:图像视频汇总
1、问题描述
cv::Mat保存RGB24或BRG24格式时,传入宽、高和格式类型CV_8UC3就行了;今天在创建cv::Mat用来保存YUV420P时,有点懵圈了,因为类型是CV_8UC1,直接传宽和高,只能保存Y分量。因此需要宽或者高乘以一个系数,才能保存完整。
一开始我将,这个系数1.5乘给了宽,并将宽width赋值给了行数rows:
cv::Mat yuv420p(width*3/2, height, CV_8UC1);
一条语句,反了两个错误:
首先,以惯性思维,理所当然的认为cv::Mat构造函数的第一个参数是宽;其实是rows,代表多少行,也就是图像的高。
其次,应该保持宽不变,高乘以1.5倍,才能正确表示YUV420P。宽不变才能从数据区一行一行取出数据,正确表达一帧图像。
2、解决方法
cv::Mat yuv420p (height*3/2, width, CV_8UC1);
或者
cv::Mat yuv420p;
yuv420p.create(height*3/2, width, CV_8UC1);
3、注意
cv::Mat中构造函数、成员函数的参数是先高height 后宽width的顺序处理参数。
这篇关于【OpenCV】正确创建用于保存YUV420P格式的cv::Mat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!