C++算法,将一个图像逆时 针旋转 90 度
2016-09-07 21:54
267 查看
问题描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时
针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
输入格式
输入的第一行包含两个整数 n, m,分别表示图像矩阵的行数和列数。 接下来 n 行每行包含 m 个整数,表示输入的图像。
输出格式
输出 m 行,每行包含 n 个整数,表示原始矩阵逆时针旋转 90 度后的矩 阵。
样例输入 2 3 1 5 3 3 2 4
评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过 1000 的非负整数
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时
针旋转 90 度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
输入格式
输入的第一行包含两个整数 n, m,分别表示图像矩阵的行数和列数。 接下来 n 行每行包含 m 个整数,表示输入的图像。
输出格式
输出 m 行,每行包含 n 个整数,表示原始矩阵逆时针旋转 90 度后的矩 阵。
样例输入 2 3 1 5 3 3 2 4
评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过 1000 的非负整数
#include<iostream> using namespace std; int main(){ int n, m; //n代表行数,m代表列数 // cout << "Please input the N:"; cin >> n; if(n<1){ cout<<"输入不符合要求,请重新输入"<<endl; cin>>n; } //cout << "Please input the M:"; cin >> m; if(m>1000){ cout<<"输入不符合要求,请重新输入"<<endl; cin>>m; } int **iArr1 =NULL; //动态开辟二维数组,重点 iArr1 = new int* ; for (int i = 0; i < n; i++) { iArr1[i] = new int[m]; } //cout << endl; int **iArr2 = NULL; iArr2 = new int*[m]; for (int i = 0; i < m; i++) { iArr2[i] = new int ; } //给二维数组iArr1赋值 for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ cin>>iArr1[i][j]; } } //int temp = 0; //转换位置 for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ iArr2[j][i] = iArr1[i][j]; } } //int temp = 0; for (int i = 0; i < m/2; i++){ for (int j = 0; j < n; j++){ /* 放弃使用中间量,采用本身的代替算法 a=a+b; b=a-b; a=a-b; */ iArr2[i][j] = iArr2[i][j]+iArr2[m-1-i][j]; iArr2[m - 1 - i][j] = iArr2[i][j] - iArr2[m - 1 - i][j]; iArr2[i][j] = iArr2[i][j]-iArr2[m - 1 - i][j]; } } //输出结果 //cout << "The Array iArr1 is:" << endl; for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ cout << iArr1[i][j]<<" "; } cout << endl; } //cout << "The Array iArr2 is:"<<endl; for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ cout << iArr2[i][j] << " "; } cout << endl; } //销毁开辟的空间,用delete,重点 for (int i = 0; i < n; i++) { delete[] iArr1[i]; iArr1[i] = NULL; } delete[]iArr1; iArr1 = NULL; for (int i = 0; i < m; i++) { delete[] iArr2[i]; iArr2[i] = NULL; } delete[]iArr2; iArr2 = NULL; return 0; }
相关文章推荐
- 使用Camera类, 旋转90预览图像的问题
- YUV420图像旋转90算法的优化
- 1.6 给出一张图片,表示为NXN的居然,每个像素点为4字节。写一个函数实现将这张图片旋转90°。
- 将一个二维数组顺时针旋转90°
- YUV420图像旋转90算法的优化
- 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转
- 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
- matlab 对一个文件夹里的所有图像进行批量旋转90度并保存
- YUV420图像旋转90算法的优化
- 面试题6 将一个n*n图像矩阵顺时针旋转90°
- 通过transpose和flip实现图像旋转90/180/270度
- opencv图像旋转90°的方式
- php图像旋转,图片旋转(逆时针90或者顺时针90)
- 将图像旋转90,180,270度
- 一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)
- php图像旋转,图片旋转(逆时针90或者顺时针90)
- 将一个二维数组顺时针旋转90°
- 自己动手,丰衣足食——一个简单却高效的图像旋转算法
- 通过transpose和flip实现图像旋转90/180/270度
- 图像的绘制,剪切,旋转,添加文字.生成图像的缩略图