Table of Contents
Rotate the given image by 90 degrees
Image : An image can be represented as a 2D matrix which can be stored in a buffer. So, the matrix contains it’s base address.
Example
First row of given matrix will be last column and of a rotated matrix, second row will be last but one and so on.
Algorithm
Time Complexity: O(m*n) for matrix (mxn)
Basic idea: In rotated_image [i] [m-j-1] = given_image [j] [i] for all i, j
Step 1 : Store the image in a 2D vector.
a)ย ย ย In the form of vector
b)ย ย ย Initialize with given values.
Step 2 : Just run two loops such that we push back the rows. Traverse the array column wise and push the element.
a)ย ย ย We create arbitrary variable vector Rotate_image.(nxm)
b)ย ย ย We just use the above idea:
Rotate_image[i].push_back(Image[M-j-1][i])
we are pushing the last row of Image into first column and so on.
Step 3: we print both the original image and rotated image
Algorithm Working example
C++ Program
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int M = 3 , N = 4;
// vector <vector <int> > Image {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
vector< vector<int> > Image(3, vector<int>(4));
Image[0][0] = 1;
Image[0][1] = 2;
Image[0][2] = 3;
Image[0][3] = 4;
Image[1][0] = 5;
Image[1][1] = 6;
Image[1][2] = 7;
Image[1][3] = 8;
Image[2][0] = 9;
Image[2][1] = 10;
Image[2][2] = 11;
Image[2][3] = 12;
vector< vector <int> > Rotate_image(N);
for(int i = 0 ; i < N; i++)
for(int j = 0 ; j < M; j++)
{
Rotate_image[i].push_back(Image[M-j-1][i]); //Traverse the array column wise in a right rotated manner and push the elements
}
cout<<"Original image \n";
for(int i = 0 ; i < M; i ++)
{
for(int j = 0 ; j < N; j++)
cout<< Image[i][j] << " ";
cout<<endl;
}
cout<<"\nRotated image is "<<endl;
for(int i = 0 ; i < N; i ++)
{
for(int j = 0 ; j < M; j++)
cout<< Rotate_image[i][j] <<" ";
cout<<endl;
}
return 0;
}Normal
0
false
false
false
EN-US
X-NONE
X-NONE