本文共 516 字,大约阅读时间需要 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。宽不变才能从数据区一行一行取出数据,正确表达一帧图像。cv::Mat yuv420p (height*3/2, width, CV_8UC1);
或者
cv::Mat yuv420p;yuv420p.create(height*3/2, width, CV_8UC1);
cv::Mat中构造函数、成员函数的参数是先高height 后宽width的顺序处理参数。
转载地址:http://zcmei.baihongyu.com/