7-1 ISBN号任务识别工作计划 (20 分)
在对一幅ISBN图像进行识别时,我们需要将任务进行分解,即分为输入图像、灰度化处理、去噪处理、二值化处理、字符分割处理、字符识别处理等步骤,但有些步骤必须在前一步骤完成的基础上实现,因此我们需要计划好各步骤完成的顺序。我们为每件任务赋予一编号,并给出一件任务及其之前发生的任务,但由于其排序通常是不唯一的,故我们规定,同等情况下,编号小的任务在前。现给定一些任务编号,请你将其按正确的顺序输出任务步骤。(假设顶点边数的输入均合法)
输入格式:
输入在第一行给出N个顶点和M条边(N<100,M<100);随后M行给出每个编号及出现在其后的任务编号。
输出格式:
在一行中输出N个顶点的正确顺序,其间以空格分隔。
输入样例:
5 5 1 2 1 3 2 4 3 4 4 5
输出样例:
在这里给出相应的输出。例如:
1 2 3 4 5
代码
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<algorithm> #include<vector> #include<set> using namespace std; int main() { int n, m; cin >> n >> m; int tmp[m][2]; set<int> st; for (int i = 0; i < m; i++) { cin >> tmp[i][0] >> tmp[i][1]; st.insert(tmp[i][0]); st.insert(tmp[i][1]); } for(std::set<int>::iterator it=st.begin(); it!=st.end(); ++it) { cout <<*it << " "; } return 0; }
7-2 读取包含ISBN号的图像文件的内容 (20 分)
图像文件在计算机中存储的都是每一个像素对应的颜色值,由RGB三通道颜色空间合成,通俗来讲就是将三个分别只有R(red),G(green),B(blue)的矩阵叠加而成,基于此原理,请将包含ISBN号的图像文件内容以三维矩阵的形式展示出来。
输入格式:
每个测试输入包含一个测试用例,第一行给出矩阵的行数m和列数n,以空格隔开,以下分别输入包含R、G、B三个颜色值的m行n列矩阵,颜色行值之间以空格隔开,矩阵之间以空行相隔。
输出格式:
对每个测试用例第一行输出矩阵的行数m和列数n,以空格隔开,下面分别输出读取到的RGB三通道颜色空间的矩阵,颜色行值之间以空格隔开,矩阵之间以空行相隔,末尾有一个空格。
输入样例:
3 3 7 7 8 2 6 9 1 3 5 10 12 14 16 17 19 15 20 11 200 219 207 221 230 218 243 231 229
输出样例:
在这里给出相应的输出。例如:
3 3 7 7 8 2 6 9 1 3 5 10 12 14 16 17 19 15 20 11 200 219 207 221 230 218 243 231 229
代码
#include <iostream> using namespace std; int main() { int m,n; cin>>m>>n; int rgb[3][m][n]; for(int i=0;i<3;++i) { for (int j = 0; j < m; ++j) for (int k = 0; k < n; ++k) cin>>rgb[i][j][k]; getchar(); } cout<<m<<" "<<n<<endl; for(int i=0;i<3;++i) { for (int j = 0; j < m; ++j) { for (int k = 0; k < n; ++k) cout<<rgb[i][j][k]<<" "; cout<<endl; } if(i<2) cout<<endl; } }
7-3 将24真彩色图转换为灰度图像 (20 分)
在自然界中,颜色本身非常容易受到光照的影响,RGB变化很大。因此,在进行图像处理之前,至关重要的一步就是将图像转化为灰度图。对于彩色转灰度,有一个很著名的心理学公式:Gray = R * 0.299 + G * 0.587 + B * 0.114。对于一张图像,我们会得到3个N行M列的矩阵分别表示R、G、B的像素值(RGB对应的范围均为0~255),我们需要将相应的每一组像素值代入以上公式,计算出相应的灰度值。现给出一幅图像R、G、B的像素值,请计算出它的灰度图。
输入格式:
每个输入包含一个测试用例,第一行输入正整数N(N<100)和M(M<100),中间以空格隔开。接下来3*N行依次输入R的像素值矩阵、G的像素值矩阵、B的像素值矩阵。每个像素值间以空格隔开,每两个矩阵无间隔(RGB取值均为0~255)。
输出格式:
在N行M列中输出计算得到的灰度图像素值。像素值间以空格隔开,末尾无多余空格。
输入样例:
3 3 3 6 8 4 8 6 3 9 5 1 4 8 5 2 8 2 5 9 2 5 7 7 5 2 3 9 6
输出样例:
1 4 7 4 4 6 2 6 7
代码
#include <iostream> using namespace std; int main() { int m,n; cin>>n>>m; int rgb[3][n][m],gray[n][m]; for(int i=0;i<3;++i) { for (int j = 0; j < n; ++j) for (int k = 0; k < m; ++k) cin>>rgb[i][j][k]; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { gray[i][j] = (299 * rgb[0][i][j] + 587 * rgb[1][i][j] + 114 * rgb[2][i][j]) / 1000; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if(j==m-1) cout<<gray[i][j]; else cout << gray[i][j] <<" "; } cout << endl; } }
7-4 做出灰度图的灰度直方图 (20 分)
图像的灰度直方图是反映一幅图片中各灰度级像素出现的频率与灰度级之间的关系,也就是说,把这幅图片中每一个像素出现的次数统计出来。请根据给出的灰度值矩阵统计出此图的灰度直方图,即统计每一个灰度值出现的频数。
输入格式:
每个测试包含一个测试样例,第一行给出矩阵的行数m和列数n,以空格隔开,以下输入一个灰度值矩阵,灰度行值之间以空格隔开,灰度值取值范围为0-255。
输出格式:
对每个测试用例中的每一个灰度值,以 灰度值v:出现频数t 的格式在一行中输出该灰度值v及其在矩阵中出现的次数t。要求按灰度值的升序输出,末尾无多余空格。
输入样例:
4 5 1 3 7 9 12 4 4 8 10 12 4 3 8 9 10 1 4 10 12 8
输出样例:
在这里给出相应的输出。例如:
1:2 3:2 4:4 7:1 8:3 9:2 10:3 12:3
代码
#include<stdio.h> #include<iostream> #include<string.h> #include<string> #include<algorithm> #include<vector> #include<set> using namespace std; int main() { int m,n; cin>>n>>m; int tmp; int arr[256]; memset(arr,0,sizeof(arr)); for (int i = 0; i < m; ++i) for (int j = 0; j < n; ++j) { cin>>tmp; arr[tmp]++; } for (int i = 0; i < 256; ++i) { if (arr[i]==0) continue; cout<<i<<":"<<arr[i]<<endl; } }