image_data.cols = opencvMat.cols; image_data.rows = opencvMat.rows; image_data.channels = opencvMat.channels(); int imageLength = image_data.cols * image_data.rows * image_data.channels; if(imageLength == 0) return false; image_data.data= malloc( imageLength * sizeof(unsigned char) ); if(image_data.data != NULL){ memcpy(image_data.data, opencvMat.data, imageLength); bStatus = true; bStatus = false; return bStatus; 在对Opencv应用过程中也会应用到相应的android系统中,对于android系统而言,其从摄像头获取的图像文件格式为YUV420sp格式,后续为了更方便的运算我们把YUV420sp格式转化为相应的BGR图像格式,对应的code如下:
//IMAGE_DATA image_data image_data中的void *data 存储了对应的YUV420sp数
int imageLength = grOcrMat.rows * grOcrMat.cols * 3 / 2;
cv::Mat yuvImg;  
cv::Mat bgrImg;
yuvImg.create( grOcrMat.rows * 3 / 2, grOcrMat.cols, CV_8UC(grOcrMat.channels) );   
memcpy(yuvImg.data, grOcrMat.data, imageLength*sizeof(unsigned char));    
cv::cvtColor(yuvImg, bgrImg, CV_YUV2BGR_NV21); 
在上面的示例代码中,我们首先创建了三个 Mat 对象来存储 YUV 图像 的亮度分量(yComponent)和色度分量(uComponent和vComponent)。然后,我们将 YUV 数据分离为这些分量,并使用相应的大小和数据指针创建了 Mat 对象。要存储 YUV 图像 ,我们需要创建一个 Mat 对象,并将亮度和色度分量存储在不同的通道中。因此,我们需要将 YUV 分量 转换 为BGR格式,并将它们存储在 Mat 对象的不同通道中。 Mat 类是 OpenCV 中最常用的 图像 容器,它提供了一种灵活的方式来存储和操作 图像 像素。 某些特定场合我们会经常遇到 yuv 420格式的视频文件,这种视频帧无法直接用于 opencv ,故而,需要进行格式 转换 ;幸运的是, opencv 提供了rgb到 yuv 420的格式 转换 函数;下面给出基本用法; 函数1:读取avi格式的视频文件, 转换 Yuv 420格式,并写入文件; void Write Yuv () cv ::VideoCapture vc; bool flag = vc.ope 某些特定场合我们会经常遇到 yuv 420格式的视频文件,这种视频帧无法直接用于 opencv ,故而,需要进行格式 转换 ;幸运的是, opencv 提供了rgb到 yuv 420的格式 转换 函数;下面给出基本用法; 函数1:读取avi格式的视频文件, 转换 Yuv 420格式,并写入文件; void Write Yuv () cv ::VideoCapture vc; bo... 1 sprintf(imagepath, "/mnt/md/test/mtcnn/images/%d.jpg", i); 4 printf("imagepath:%s\n", imagepath); 5 cv :: Mat cv _img = cv ::imread(imagepath, 3); 6 if ( cv _img.empty()) 8 fprin... avcodec_encode_video2():编码一帧视频。avfor mat _write_header():写文件头(对于某些没有文件头的封装格式,不需要此函数。av_write_trailer():写文件尾(对于某些没有文件头的封装格式,不需要此函数。avfor mat _alloc_output_context2():初始化输出码流的AVFor mat Context。av_new_stream():创建输出码流的AVStream。av_write_frame():将编码后的视频码流写入文件。 YUV 420 -> Mat 可用于 转换 接受到的 YUV 视频源到 OpenCV 可以识别的数据 Mat m yuv ( Frame_Height + Frame_Height / 2, Frame_Width, CV _8UC1, (unsigned char *) YUV 420_Image_Buffer); cv tColor(m yuv , mg Mat , CV _ YUV 420p2RGB); Mat -> YUV 420 可用于 OpenCV 处理完视频信号后返回 cv tColor(mg Mat , m yuv ,C. 保存为NV12格式的 yuv 420,yy yuv uvuv #include <string> #include <iostream> #include < opencv 2/highgui/highgui.hpp> #include < opencv 2/i 设实际宽高为w*h的 图像 ,如果是RGB格式,那么他的数据量为w*h*3; 如果是 yuv 420格式,那么他的数据量为w*h*1.5 因为 yuv 4:4:4的数据量等于RGB数据量,而 yuv 4:4:4是 yuv 4:2:0数据量的2倍,所以 yuv 4:2:0的数据量为w*h*3/2。 从 yuv 420sp 化得到rgb的步骤: 1.当我们拿到一帧 图像 yuv 原始数据后,首先需要明确拿到的是以下哪种 yuv 数据: yuv 4:4:4、 yuv 4:2:2、 yuv 4:2:0。并且,我们都会知道给对应 图像 的宽和高,因为这都是驱动配置给