关于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); 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值