【OpenCV】正确创建用于保存YUV420P格式的cv::Mat
生活随笔
收集整理的這篇文章主要介紹了
【OpenCV】正确创建用于保存YUV420P格式的cv::Mat
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、問題描述
cv::Mat保存RGB24或BRG24格式時,傳入寬、高和格式類型CV_8UC3就行了;今天在創(chuàng)建cv::Mat用來保存YUV420P時,有點懵圈了,因為類型是CV_8UC1,直接傳寬和高,只能保存Y分量。因此需要寬或者高乘以一個系數(shù),才能保存完整。
一開始我將,這個系數(shù)1.5乘給了寬,并將寬width賦值給了行數(shù)rows:
cv::Mat yuv420p(width*3/2, height, CV_8UC1);
一條語句,反了兩個錯誤:
首先,以慣性思維,理所當(dāng)然的認(rèn)為cv::Mat構(gòu)造函數(shù)的第一個參數(shù)是寬;其實是rows,代表多少行,也就是圖像的高。
其次,應(yīng)該保持寬不變,高乘以1.5倍,才能正確表示YUV420P。寬不變才能從數(shù)據(jù)區(qū)一行一行取出數(shù)據(jù),正確表達(dá)一幀圖像。
2、解決方法
cv::Mat yuv420p (height*3/2, width, CV_8UC1);
或者
cv::Mat yuv420p;
yuv420p.create(height*3/2, width, CV_8UC1);
3、注意
cv::Mat中構(gòu)造函數(shù)、成員函數(shù)的參數(shù)是先高h(yuǎn)eight 后寬width的順序處理參數(shù)。
總結(jié)
以上是生活随笔為你收集整理的【OpenCV】正确创建用于保存YUV420P格式的cv::Mat的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++】clipp 一个命令行参数解析
- 下一篇: 【MySQL】ubuntu16.04安装