OpenCV 图像格式BGR转 YUV420sp问题
一、OpenCV 图像格式转换为YUV420
// yuv420sp format: CV_8UC1, cols: image_width, rows: image_height*3/2
cv::cvtColor(image, yuv420sp, cv::COLOR_BGR2YUV_I420);
注意: 上面这行代码转为YUV420后,Y、U、V都是单独平铺的,即 Y,Y,Y... U,U,U... V,V,V...
二:转为YUV420sp, UV交叠
/*---------------------------------------------------------------------------
** Convert image format: BGR to YUV420sp
**
** YUV420sp:
** Y Y Y Y ...
** U V U V ...
** -------------------------------------------------------------------------*/
void To_YUV420_SP(const cv::Mat &image, cv::Mat &yuv420sp)
{
cv::cvtColor(image, yuv420sp, cv::COLOR_BGR2YUV_I420); // yuv420sp format: CV_8UC1, cols: image_width, rows: image_height*3/2
cv::Mat temp = yuv420sp.clone();
const unsigned char *pU = temp.data + image.cols*image.rows; // skip Y
const unsigned char *pV = temp.data + image.cols*image.rows + image.cols*image.rows/4; // skip Y and U
unsigned char *pUV = yuv420sp.data + image.cols*image.rows; // skip Y
for(int j=0; j<image.cols*image.rows/4; j++){
*pUV++ = *pU++;
*pUV++ = *pV++;
}
return;
}
评论已关闭