您的位置:首页 > 其它

YUV 中 YV21图像格式的旋转

2017-06-11 15:41 1846 查看
最近在做视频传输

众所周知,由于很多设备上的摄像头的摆放问题,我们通过API获取到的图像是逆时针旋转了90°的

所以在真正使用的时候,我们需要将图像顺时针旋转90°才能正常适用

我初入此行,很多还不懂。

但经过测试

我们测试用的“荣耀平板”,输出的图像格式是 YV12

而我个人的“小米5手机”,输出的图像格式是YUV_420_888

下图,也是经过调试尝试出我们的测试平板所输出的这样的图像格式



为了将图像顺时针旋转90°,我在网上找了很多代码,发现很多都不对

错误现象有:

图像无法匹配,直接让程序闪退

大部分错误是是对图像做了个类似矩阵的转置,是的图像发生了镜像翻转(震惊)

经过多次测试,终于旋转正确了,果然这种东西还是要自己来推一推才能行

private byte[] yuv_rotate90(byte[] src,int width,int height){
byte[]des = new byte[src.length];

int wh = width * height;
//旋转Y
int k = 0;
for(int i = 0; i < width; i++) {
for (int j = height - 1; j >= 0; j--) {
des[k++] = src[j * width + i];
}
}

//旋转UV
int uvHeight = height >> 1;
int uvWidth = width >> 1;
int uvWH = uvHeight * uvWidth;

for(int i = 0;i < width; i += 2){
for(int j = uvHeight - 1;j >= 0; j--){
des[k] = src[wh + width * j + i];
des[k+1] = src[wh + width * j + i + 1];
k += 2;
}
}

return des;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yuv 旋转