YUV 中 YV21图像格式的旋转
2017-06-11 15:41
1846 查看
最近在做视频传输
众所周知,由于很多设备上的摄像头的摆放问题,我们通过API获取到的图像是逆时针旋转了90°的
所以在真正使用的时候,我们需要将图像顺时针旋转90°才能正常适用
我初入此行,很多还不懂。
但经过测试
我们测试用的“荣耀平板”,输出的图像格式是 YV12
而我个人的“小米5手机”,输出的图像格式是YUV_420_888
下图,也是经过调试尝试出我们的测试平板所输出的这样的图像格式
为了将图像顺时针旋转90°,我在网上找了很多代码,发现很多都不对
错误现象有:
图像无法匹配,直接让程序闪退
大部分错误是是对图像做了个类似矩阵的转置,是的图像发生了镜像翻转(震惊)
经过多次测试,终于旋转正确了,果然这种东西还是要自己来推一推才能行
众所周知,由于很多设备上的摄像头的摆放问题,我们通过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; }
相关文章推荐
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解 (2012-04-24 15:21:16)
- YUV的图像格式
- RGB与YUV图像视频格式的相互转换
- YUV420图像格式
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- Android OpenGL YUV 旋转花屏解决、Camera获取图像
- 图像格式之--YUV
- 视频与图像RGB/YUV格式详解
- YUV图像格式
- 彩色图像转YUV格式序列存取(陆)
- YUV图像格式
- 【OpenCV】图像转成YUV420 I420格式
- RGB与YUV图像视频格式的相互转换
- 将jpg图像转换成yuv420p格式
- Java图片缩略图裁剪水印缩放旋转压缩转格式-Thumbnailator图像处理
- 视频与图像RGB/YUV格式详解
- YUV图像格式