关于Opencv图像的转换(YUV420sp)

这里先举一个例子,把Opencv中的图像数据存储到一个void *data数据中

struct IMAGE_DATA
	void *data;        //图像数据
	int   rows;        //图像高
	int   cols;        //图像宽
	int   channels;    //图像通道数
};
bool OpencvMat2data(cv::Mat &opencvMat,IMAGE_DATA &image_data) 
{
	bool bStatus = true;
	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;
	}
	else
		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); 


你可能感兴趣的:(图像处理,编程)