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。并且,我们都会知道给对应
图像
的宽和高,因为这都是驱动配置给