c/c++ 单色灰度图YUV420sp格式旋转90度
时间: 2023-09-12 07:10:27 浏览: 128
你可以使用以下代码来旋转一个单色灰度图的 YUV420sp 格式图像 90 度:
```c++
#include <stdio.h>
void rotateYUV420sp90Degree(unsigned char *src, unsigned char *dst, int width, int height) {
int wh = width * height;
int uvHeight = height >> 1;
// 旋转 Y 分量
int k = 0;
for (int i = 0; i < width; i++) {
for (int j = height - 1; j >= 0; j--) {
dst[k++] = src[j * width + i];
}
}
// 旋转 U 和 V 分量
for (int i = 0; i < width; i += 2) {
for (int j = uvHeight - 1; j >= 0; j--) {
dst[k++] = src[wh + j * width + i];
dst[k++] = src[wh + j * width + i + 1];
}
}
}
int main() {
// 假设输入的 YUV420sp 图像是 128x128 大小
int width = 128;
int height = 128;
int wh = width * height;
int uvSize = wh >> 2;
unsigned char *src = new unsigned char[wh + uvSize * 2];
unsigned char *dst = new unsigned char[wh + uvSize * 2];
// 假设将输入的图像初始化为某个值
for (int i = 0; i < wh + uvSize * 2; i++) {
src[i] = i;
}
rotateYUV420sp90Degree(src, dst, width, height);
// 输出旋转后的图像
for (int i = 0; i < wh + uvSize * 2; i++) {
printf("%d ", dst[i]);
}
delete[] src;
delete[] dst;
return 0;
}
```
上述代码使用一个 `rotateYUV420sp90Degree` 函数来旋转 YUV420sp 图像。这个函数首先旋转 Y 分量,然后旋转 U 和 V 分量。在 `main` 函数中,假设输入的图像大小为 128x128,将输入的图像初始化为某个值,然后调用 `rotateYUV420sp90Degree` 函数进行旋转,并打印旋转后的图像数据。
请注意,上述代码仅适用于 YUV420sp 格式的图像,如果输入的图像格式不是 YUV420sp,则需要进行相应的修改。
阅读全文