在jni环境调用libyuv,把手机图像从RGB转成yuv420,旋转270度, 用matlab显示灰度图

转换yuv,把数据用txt 保存下来,但是yuv viewer一直打不开,非常苦恼,调试很多天确认代码没问题,用matlab显示出来,uv分量应该是原图宽高的1/2采样,却不明白为何出现了1/4采样,后来发现图像是480*720的,按照内存地址排放顺序,本来都是U分量结果被拆成了2张图,所以,这个结果应该是正确的

至于为什么软件打不开,应该是yuv图片本身除了数据还具有其他的格式来说明,就像BMP的文件头一样,但是网上没有资料,所以这部分等我有时间再丰富吧!

Uint8 * rgb2gray = malloc(sizeof(char) * (width*height*1.5));
Uint8 * rgb2grayY = malloc(sizeof(char) * (lenghth));
Uint8 * rgb2grayU= malloc(sizeof(char) * (lenghth / 4));
Uint8 * rgb2grayV= malloc(sizeof(char) * (lenghth / 4));
	ARGBToI420(bitmapPixels,	bitmapInfo.stride,
		  rgb2grayY,		bitmapInfo.width,
		  rgb2grayU,		bitmapInfo.width / 2,
		  rgb2grayV,		bitmapInfo.width / 2,
		  bitmapInfo.width, bitmapInfo.height);
memcpy(rgb2gray, rgb2grayY, lenghth);
memcpy(rgb2gray + lenghth, rgb2grayU, lenghth/4);
memcpy(rgb2gray + lenghth*5/4, rgb2grayV, lenghth/4);

在这里插入图片描述

转270度,分别测试的代码,所以和前图不一样了
Uint8 dst270 = malloc(sizeof(char) * (lenghth1.5));
Uint8 *dst270_y = malloc(sizeof(char) * (lenghth));
Uint8 *dst270_u = malloc(sizeof(char) * (lenghth / 4));
Uint8 *dst270_v = malloc(sizeof(char) * (lenghth / 4));

int dst270_width = bitmapInfo.height;
int dst270_height= bitmapInfo.width;
I420Rotate( rgb2grayY,   dst270_height,
			rgb2grayU, (dst270_height + 1) / 2,
			rgb2grayV, (dst270_height + 1) / 2,
			dst270_y,   dst270_width,
			dst270_u,  (dst270_width + 1) / 2,
			dst270_v,  (dst270_width + 1) / 2,
			dst270_height, dst270_width,
			270);
memcpy(dst270, dst270_y, lenghth);
memcpy(dst270+ lenghth, dst270_u, lenghth/4);
memcpy(dst270+ lenghth*5/4, dst270_v, lenghth/4);

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值