C语言实现旋转图像(附带源码)
本项目 用 C 语言实现了二维图像的旋转,包括 90° 顺时针、逆时针旋转,并支持 非方形矩阵。这是 计算机图形学和图像处理的基础算法,可用于 图像编辑软件、游戏开发、人工智能图像处理 等场景。
·
C 语言实现旋转图像
一、项目介绍
图像旋转是一种常见的图像处理操作,主要应用于 计算机视觉、游戏开发、图像编辑 等领域。本项目使用 C 语言 读取一个 二维矩阵(图像像素数据),并对其进行 顺时针或逆时针旋转 90°。
二、项目实现思路
1. 旋转规则
给定一个 N × N 的二维数组(矩阵)表示图像:
1 2 3
4 5 6
7 8 9
顺时针旋转 90° 结果:
7 4 1
8 5 2
9 6 3
逆时针旋转 90° 结果:
3 6 9
2 5 8
1 4 7
2. 旋转方法
-
顺时针 90° 旋转:
- 先转置矩阵(行变列)。
- 再水平翻转(交换左右列)。
-
逆时针 90° 旋转:
- 先转置矩阵(行变列)。
- 再垂直翻转(交换上下行)。
三、C 语言实现代码
#include <stdio.h>
#define N 3 // 定义图像矩阵大小
// 显示矩阵
void displayMatrix(int matrix[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
// 旋转矩阵顺时针 90°
void rotateClockwise(int matrix[N][N]) {
// 1. 转置矩阵(matrix[i][j] 交换 matrix[j][i])
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 2. 水平翻转(左右交换)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N / 2; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[i][N - j - 1];
matrix[i][N - j - 1] = temp;
}
}
}
// 旋转矩阵逆时针 90°
void rotateCounterClockwise(int matrix[N][N]) {
// 1. 转置矩阵(matrix[i][j] 交换 matrix[j][i])
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 2. 垂直翻转(上下交换)
for (int i = 0; i < N / 2; i++) {
for (int j = 0; j < N; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[N - i - 1][j];
matrix[N - i - 1][j] = temp;
}
}
}
int main() {
int image[N][N] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
printf("原始矩阵:\n");
displayMatrix(image);
// 顺时针旋转 90°
rotateClockwise(image);
printf("顺时针旋转 90°:\n");
displayMatrix(image);
// 逆时针旋转 90°(恢复原状)
rotateCounterClockwise(image);
printf("逆时针旋转 90°(恢复原始矩阵):\n");
displayMatrix(image);
return 0;
}
四、代码解读
1. displayMatrix()
- 作用:打印
N × N矩阵。
2. rotateClockwise()
- 作用:顺时针旋转 90°。
- 逻辑:
- 转置矩阵(交换
matrix[i][j]和matrix[j][i])。 - 水平翻转(交换
matrix[i][j]和matrix[i][N-j-1])。
- 转置矩阵(交换
3. rotateCounterClockwise()
- 作用:逆时针旋转 90°。
- 逻辑:
- 转置矩阵(交换
matrix[i][j]和matrix[j][i])。 - 垂直翻转(交换
matrix[i][j]和matrix[N-i-1][j])。
- 转置矩阵(交换
五、示例运行
运行结果:
原始矩阵:
1 2 3
4 5 6
7 8 9
顺时针旋转 90°:
7 4 1
8 5 2
9 6 3
逆时针旋转 90°(恢复原始矩阵):
1 2 3
4 5 6
7 8 9
六、扩展功能
1. 旋转 180°
思路:
- 连续调用两次
rotateClockwise()或rotateCounterClockwise()。 - 或者直接 对角翻转 + 水平翻转:
void rotate180(int matrix[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N / 2; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[N - i - 1][N - j - 1];
matrix[N - i - 1][N - j - 1] = temp;
}
}
}
2. 旋转 M × N 矩阵
对于 非方形矩阵:
- 创建新矩阵,将
matrix[i][j]重新映射到[j][M-1-i]。
void rotateRectangular(int rows, int cols, int matrix[rows][cols], int result[cols][rows]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[j][rows - i - 1] = matrix[i][j]; // 映射规则
}
}
}
七、项目总结
1. 主要功能
✅ 实现矩阵(图像)旋转 90°
✅ 支持顺时针和逆时针旋转
✅ 可扩展到 M × N 矩阵
2. 可优化方向
- 使用更通用的数据结构(如
malloc分配动态大小)。 - 支持任意角度旋转(使用
数学变换 + 插值)。 - 支持灰度图像或彩色图像的旋转。
八、总结
本项目 用 C 语言实现了二维图像的旋转,包括 90° 顺时针、逆时针旋转,并支持 非方形矩阵。这是 计算机图形学和图像处理的基础算法,可用于 图像编辑软件、游戏开发、人工智能图像处理 等场景。
更多推荐



所有评论(0)