分享

图像的翻转旋转

 长沙7喜 2018-04-16


图像的翻转旋转

【问题描述】给定m行n列的图像各像素点灰度值,对其依次进行一系列操作后,求最终图像。

其中,可能的操作及对应字符有如下四种:

A:顺时针旋转90度;

B:逆时针旋转90度;

C:左右翻转;

D:上下翻转。

【输入】

第一行包含两个正整数m和n,表示图像的行数和列数,中间用单个空格隔开。1 <= m=""><= 100,="" 1=""><= n=""><=>
接下来m行,每行n个整数,表示图像中每个像素点的灰度值,相邻两个数之间用单个空格隔开。灰度值范围在0到255之间。
接下来一行,包含由A、B、C、D组成的字符串s,表示需要按顺序执行的操作序列。s的长度在1到100之间。

【输出】

m'行,每行包含n'个整数,为最终图像各像素点的灰度值。其中m'为最终图像的行数,n'为最终图像的列数。相邻两个整数之间用单个空格隔开。

样例输入

2 3
10 0 10
100 100 10
AC

样例输出

10 100
0 100
10 10


问题解析:

1)       例如原始数组为a数组,变换后存入b数组当中,分析每种变换之后的坐标有什么特点以及行和列有什么变化:

顺时针翻转:b[j][m-1-i]= a[i][j];   b数组的行数是a数组的列数,b数组的列数是a数组的行数;

逆时针翻转:b[n-1-j][i]= a[i][j];  b数组的行数是a数组的列数,b数组的列数是a数组的行数;

左右翻转:b[i][n-1-j]= a[i][j];   行和列均不变;

上下翻转:b[m-1-i][j]= a[i][j];  行和列均不变;

使用自定义函数单独处理四种翻转变换;

2)       输入一个二维数组a,输入一个字符串s,遍历字符串,判断每个字符,如果是A,则调用顺时针翻转函数,如果是B,则调用逆时针翻转函数,如果是C,则调用左右翻转函数,如果是D,则调用上下翻转函数;

3)       最后将变换后的图形输出。


完整代码参考:

#include

#include

using namespace std;

int a[100][100]={};

int b[100][100]={};

int m,n;

//定义复制数组函数

void copyab(){

        for(int i = 0; i < m;="" i++)="">

               for(int j = 0;j <>

                       a[i][j] = b[i][j];

               }

        }

}

//定义顺时针翻转函数

void clockwise() {

        for(int i = 0; i < m;="" i++)="">

               for(int j = 0;j <>

                       b[j][m-1-i]=a[i][j];

               }

        }

        int t = m;

        m = n;

        n = t;

        copyab();

}

//定义逆时针翻转函数

void anticlockwise() {

        for(int i = 0; i < m;="" i++)="">

               for(int j= 0; j

                       b[n-1-j][i]=a[i][j];

               }

        }

        int t = m;

        m = n;

        n = t;

        copyab();

}

//定义左右翻转函数

void flip() {

        for(int i = 0; i < m;="" i++)="">

               for(int j = 0; j < n;="" j++)="">

                       b[i][n-1-j]=a[i][j];

               }

        }

        copyab();

}

//定义上下翻转函数

void upside_down() {

        for(int i = 0; i < m;="" i++)="">

               for(int j = 0; j < n;="" j++)="">

                       b[m-1-i][j]=a[i][j];

               }

        }

        copyab();

}

 

int main() {

        //1.输入二维数组

        cin >>m >>n;

        for(int i = 0; i < m;="" i++)="">

               for(int j = 0; j < n;="" j++)="">

                       cin >>a[i][j];

               }

        }

        //2.输入字符串并判断每个字符调用对应的函数

        string s;

        cin>>s;

        for(int i = 0;i <>

               if(s[i] == 'A'){

                       clockwise();

               }else if(s[i] == 'B'){

                       anticlockwise();

               }else if(s[i] == 'C'){

                       flip();

               }else if(s[i] == 'D'){

                       upside_down();

               }

        }

        //3.输出变换后的二维数组

        for(int i = 0; i < m;="" i++)="">

               for(int j = 0; j < n;="" j++)="">

                       cout < a[i][j]="">< '="">

               }

               cout < endl;="">

        }

        return 0;

}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多