C语言 图像处理

题目描述

自称图灵再世的唐古拉斯·小明最近对图像处理着了迷,今天有几个难题阻碍了小明拿图灵奖的步伐,小明希望你能帮帮他。

我们知道图像是由一个像素矩阵表示。彩色图像中每个像素由三个8位无符号数表示;灰度图像中每个像素由一个8位无符号数(0~255)表示。下图展示的是一张灰度图像,图中的二维数组对应于所选区域的像素矩阵(数组中各像素值均为8位无符号数)。

在这里插入图片描述

了解到你是刚刚接受计算机知识洗礼的小萌新,小明只需要你帮他解决灰度图像的像素矩阵,毕竟聪明的小明很容易就可以将知识融会贯通,把你的解决办法转移到彩色图像。

小明在用某软件编辑图像时就想实现其中一些功能。今天,小明希望你能帮他实现以下几个很实用的功能:

  1. 水平镜像翻转图像,如下图所示(图中的二维数组对应于原图像所选区域实现水平镜像翻转后的像素矩阵):
    在这里插入图片描述

  2. 将图像反色(提示:二进制中0的反为1,1的反为0,不妨将像素值视为256进制),如下图所示(图中的二维数组对应于原图像所选区域实现反色后的像素矩阵):

在这里插入图片描述

  1. 将图像逆时针旋转90°,如下图所示(图中的二维数组对应于原图像所选区域实现逆时针旋转90°后的像素矩阵):
    在这里插入图片描述

输入

第一行包含一个正整数T(T <= 50), 表示测试数据组数。

接下来有T组数据,对于每组数据:

第一行包含两个正整数M,N(中间由一个空格隔开,1<M, N<=100),表示图像像素矩阵的行、列数;

接下来有M行,每一行有N个整数,每个数的范围为0~255,表示一个灰度像素值。

每组输入数据后有一个空行。

输出

对于每组输入数据,对应的输出包含2*M+N+4行:

第1行为“Case #t:”,t表示数据组数;

第2~(M+1)行为原图像执行功能1后的像素矩阵,每一个像素值后有一个空格;

第(M+2)行为空行;

第(M+3)~(2*M+2)行为原图像执行功能2后的像素矩阵,每一个像素值后有一个空格;

第(2*M+3)行为空行;

第(2M+4)~(2M+N+3)行为原图像执行功能3后的像素矩阵,每一个像素值后有一个空格;

第(2*M+N+4)行为空行。

样例输入 Copy

2
2 3
124 95 20
88 65 73

8 5
40 38 54 59 49
55 49 50 83 79
87 90 112 132 131
129 151 142 147 187
167 165 155 163 156
99 95 123 155 151
139 123 161 164 144
157 143 146 175 179

样例输出 Copy

Case #1:
20 95 124
73 65 88

131 160 235
167 190 182

20 73
95 65
124 88

Case #2:
49 59 54 38 40
79 83 50 49 55
131 132 112 90 87
187 147 142 151 129
156 163 155 165 167
151 155 123 95 99
144 164 161 123 139
179 175 146 143 157

215 217 201 196 206
200 206 205 172 176
168 165 143 123 124
126 104 113 108 68
88 90 100 92 99
156 160 132 100 104
116 132 94 91 111
98 112 109 80 76

49 79 131 187 156 151 144 179
59 83 132 147 163 155 164 175
54 50 112 142 155 123 161 146
38 49 90 151 165 95 123 143
40 55 87 129 167 99 139 157

代码

#include<stdio.h>
#include<math.h>

int main()
{
	int i,t,m[50],n[50],j,k,a[50][100][100];
	scanf("%d",&t);
	for(i=0;i<t;i++)
	{
		scanf("%d %d",&m[i],&n[i]);
	
		for(j=0;j<m[i];j++)
		{
			for(k=0;k<n[i];k++)
			{
				scanf("%d",&a[i][j][k]);
			}
		}
	}
		for(i=0;i<t;i++)
		{
			printf("Case #%d:\n",i+1);
			for(j=0;j<m[i];j++)
			{
				for(k=n[i]-1;k>=0;k--)
				{
					printf("%d ",a[i][j][k]);
				}
				printf("\n");
			}
			
			printf("\n");
			
			for(j=0;j<m[i];j++)
			{
				for(k=0;k<n[i];k++)
				{
					printf("%d ",255-a[i][j][k]);
				}
				printf("\n");
			}
			
			printf("\n");
		
			for(j=n[i]-1;j>=0;j--)
			{
				for(k=0;k<m[i];k++)printf("%d ",a[i][k][j]);
					printf("\n");
			}
		
			printf("\n");
	}
}
发布了47 篇原创文章 · 获赞 29 · 访问量 1477

猜你喜欢

转载自blog.csdn.net/Qianzshuo/article/details/103759110
今日推荐