質問編集履歴

2

2018/11/25 03:04

投稿

chihiro_0701
chihiro_0701

スコア10

test CHANGED
@@ -1 +1 @@
1
- 至急お願いしす!!学校の宿題です
1
+ c言語で白黒画像処理の仕方がわかりせん
test CHANGED
File without changes

1

2018/11/25 03:04

投稿

chihiro_0701
chihiro_0701

スコア10

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  プログラミング初心者です。
4
4
 
5
- C言語で下のよう表示させるにはどうすればいいか教えてください。
5
+ C言語で下のような白黒画像を表示させるにはどうすればいいか教えてください。
6
6
 
7
- 下にサンルプログラムがあるのですが、よくわかりません。
7
+ 下に実際に作成したプログラムがあるのですが、よくわかりません。
8
8
 
9
- サンプルプログラムのうな感じでお願いします
9
+ ろしくお願いします
10
10
 
11
11
 
12
12
 
@@ -40,133 +40,71 @@
40
40
 
41
41
 
42
42
 
43
- ###補足
44
-
45
- 画像処理や迷路を探索するロボットのプログラムでは,塗りつぶしルーチンによく用いられる.例えば9×9の白黒二値画像があったとする.このまんなかの(5,5)から塗りつぶしを行う.塗りつぶしとはその座標に連結している黒画素を抜き出す操作である.
46
-
47
-
48
-
49
- □■■□□□□□□
50
-
51
- ■■□■■■■■□
52
-
53
- □□□□■□■□□
54
-
55
- ■■□□■■■□□
56
-
57
- ■□□□■■□□□
58
-
59
- □□□□□■□□□
60
-
61
- □■■■■■■□■
62
-
63
- □■□□□□□■□
64
-
65
- ■□□□□□□■□
66
-
67
- この結果次の画像が出力されるはずである.
68
-
69
-
70
-
71
- □□□□□□□□□
72
-
73
- □□□■■■■■□
74
-
75
- □□□□■□■□□
76
-
77
- □□□□■■■□□
78
-
79
- □□□□■■□□□
80
-
81
- □□□□□■□□□
82
-
83
- □■■■■■■□□
84
-
85
- □■□□□□□□□
86
-
87
- □□□□□□□□□
88
-
89
- ここで,連結しているかどうかは上下左右の4方向だけで判定する.(これを4連結と呼ぶ.ちなみに斜めも含めて判定する場合には,8連結と呼ぶ.)
90
-
91
-
92
-
93
- 上記を参考にして,次の画像データで同様にある地点からぬりつぶし処理を行った結果,連結された画素数を答えるプログラムを作成せよ.塗りつぶし開始位置は,キーボードから入力させた数字がxのとき,座標(x,x)からとする.画像データは上記と異なり,12×12とする.当然,課題のプログラム中のデータはこれに合わすように変更する点に注意.
94
43
 
95
44
 
96
45
 
97
46
 
98
-
99
- 参考
100
-
101
- このような塗りつぶしを実現するには,再帰を用いる.
102
-
103
-
104
-
105
- これを再帰呼出を利用して実現するには,次のような関数を用意するものとする.
106
-
107
-
108
-
109
- int fill(int x, int y); //塗りつぶし関数
110
-
111
- 入力画像のデータは上記の画像の白を0,黒を1としてあらかじめ初期化しておく.出力画像のデータはすべて白(0)とする.
112
-
113
-
114
-
115
- 関数fillは,座標(x,y)から塗りつぶしを始めて,塗りつぶした画素の数を返すとする.ただし, 座標は左上を(0,0)とし右下を(8,8)とする.また,返値だけでなく塗りつぶした画素位置に相当するoutputの(x,y)をすべて1,ぬりつぶした領域外は0のままとする.
116
-
117
-
118
-
119
- そうすると,プログラムはだいだい次のような感じになる.
120
-
121
-
122
-
123
- ###プログラム例(上の補足に書かれてる画像がinput部分?)
47
+ ###試したこと(上の補足に書かれてる画像がinput部分?)
124
48
 
125
49
  #include <stdio.h>
126
50
 
127
51
  int fill(int x, int y);
128
52
 
129
- int input[9][9] = {
53
+ int input[12][12] = {
130
54
 
131
- {0,1,1,0,0,0,0,0,0},
55
+ {0,0,0,0,0,0,0,1,1,1,1,1},
132
56
 
133
- {1,1,0,1,1,1,1,1,0},
57
+ {0,0,1,1,0,0,0,0,0,0,0,1},
134
58
 
135
- {0,0,0,0,1,0,1,0,0},
59
+ {0,1,0,1,1,1,1,1,1,1,1,1},
136
60
 
137
- {1,1,0,0,1,1,1,0,0},
61
+ {0,0,0,0,0,1,0,1,0,0,0,1},
138
62
 
139
- {1,0,0,0,1,1,0,0,0},
63
+ {0,1,1,1,0,1,1,1,0,1,1,1},
140
64
 
141
- {0,0,0,0,0,1,0,0,0},
65
+ {0,1,0,0,0,1,1,0,0,1,1,1},
142
66
 
143
- {0,1,1,1,1,1,1,0,1},
67
+ {0,0,0,0,0,0,0,0,0,1,0,1},
144
68
 
145
- {0,1,0,0,0,0,0,1,0},
69
+ {0,0,1,1,1,1,1,1,0,1,0,1},
146
70
 
71
+ {0,1,1,0,0,0,1,0,1,0,0,1},
72
+
147
- {1,0,0,0,0,0,0,1,0}
73
+ {0,1,0,0,0,0,1,0,1,0,0,1},
74
+
75
+ {0,0,1,1,1,1,1,1,1,1,0,1},
76
+
77
+ {1,0,0,0,0,0,0,0,0,1,1,1},
148
78
 
149
79
  };
150
80
 
151
- int output[9][9] = {
152
81
 
153
- {0,0,0,0,0,0,0,0,0},
154
82
 
155
- {0,0,0,0,0,0,0,0,0},
83
+ int output[12][12] = {
156
84
 
157
- {0,0,0,0,0,0,0,0,0},
85
+ {0,0,0,0,0,0,0,0,0,0,0,0},
158
86
 
159
- {0,0,0,0,0,0,0,0,0},
87
+ {0,0,0,0,0,0,0,0,0,0,0,0},
160
88
 
161
- {0,0,0,0,0,0,0,0,0},
89
+ {0,0,0,0,0,0,0,0,0,0,0,0},
162
90
 
163
- {0,0,0,0,0,0,0,0,0},
91
+ {0,0,0,0,0,0,0,0,0,0,0,0},
164
92
 
165
- {0,0,0,0,0,0,0,0,0},
93
+ {0,0,0,0,0,0,0,0,0,0,0,0},
166
94
 
167
- {0,0,0,0,0,0,0,0,0},
95
+ {0,0,0,0,0,0,0,0,0,0,0,0},
168
96
 
169
- {0,0,0,0,0,0,0,0,0},
97
+ {0,0,0,0,0,0,0,0,0,0,0,0},
98
+
99
+ {0,0,0,0,0,0,0,0,0,0,0,0},
100
+
101
+ {0,0,0,0,0,0,0,0,0,0,0,0},
102
+
103
+ {0,0,0,0,0,0,0,0,0,0,0,0},
104
+
105
+ {0,0,0,0,0,0,0,0,0,0,0,0},
106
+
107
+ {0,0,0,0,0,0,0,0,0,0,0,0},
170
108
 
171
109
  };
172
110