質問編集履歴
2
問題点の絞り込み
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,8 +20,9 @@
|
|
20
20
|
PNM画像 エラーメッセージ
|
21
21
|
不正な X解像度です」
|
22
22
|
|
23
|
+
おそらく、void equality 内の2重ループの中に記載した疑似カラー変換関数の書き方(if文の使い方)などが誤っていると考えています。
|
23
24
|
|
24
|
-
ヘッダファイルの内容は変更せずに、void equality
|
25
|
+
ヘッダファイルの内容は変更せずに、void equalityの中身をどのように書き換えれば、画像が正しく生成されるかを教えていただきたいです。
|
25
26
|
|
26
27
|
なお、実行すると下記のような画面になりました。
|
27
28
|
-------------------------------------
|
1
文字数制限の上限まで書いていたので、ヘッダファイルのコメントをすべて削除した。 また、具体的なエラーメッセージを追加した。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### 実現したいこと
|
2
2
|
画像に疑似カラーをつけるプログラムを作成したいです。
|
3
3
|
|
4
|
-
入力はグレースケール画像(.pgmファイル)で、それをRGBそれぞれの変換式で変換を行い、結果をRGBそれぞれのチャンネルへ出力する(.ppmファイル)方法で作成したいです。
|
4
|
+
入力はグレースケール画像(.pgmファイル)で、それをRGBそれぞれの疑似カラー変換関数式で変換を行い、結果をRGBそれぞれのチャンネルへ出力する(.ppmファイル)方法で作成したいです。
|
5
5
|
|
6
6
|
変換式は疑似カラー変換関数を参考にします。
|
7
7
|
R=0 (I < 128), (I - 128)255/192-128 (128 < I <= 192), 255 (I > 192)
|
@@ -11,10 +11,19 @@
|
|
11
11
|
また、ファイルを読み書き吸うためのヘッダファイルをppmpgm.hとします。
|
12
12
|
|
13
13
|
### 発生している問題・分からないこと
|
14
|
-
以下のようなプログラムを作って実行しましたが、画像が
|
14
|
+
以下のようなプログラムを作って実行しましたが、GIMPで以下のようなエラーメッセージが出力され、画像が生成されませんでした。なお、画像自体は著作権の関係もあり、ここでは表示しません。
|
15
|
-
どのようにプログラムを書き換えれば、うまく実行されるかを教えていただきたいです。
|
16
15
|
|
16
|
+
「GIMP エラーメッセージ
|
17
|
+
'(File)'のオープンに失敗しました。
|
18
|
+
PNM画像 plug-in could not open image
|
19
|
+
|
20
|
+
PNM画像 エラーメッセージ
|
21
|
+
不正な X解像度です」
|
22
|
+
|
23
|
+
|
24
|
+
ヘッダファイルの内容は変更せずに、void equalityまたはvoid mainの中身をどのように書き換えれば、画像が正しく生成されるかを教えていただきたいです。
|
25
|
+
|
17
|
-
なお、実行すると下記のような画面になりま
|
26
|
+
なお、実行すると下記のような画面になりました。
|
18
27
|
-------------------------------------
|
19
28
|
モノクロ階調画像入力ル-チン
|
20
29
|
-------------------------------------
|
@@ -112,13 +121,13 @@
|
|
112
121
|
|
113
122
|
void load_image_ppm(void)
|
114
123
|
{
|
115
|
-
char file_name[MAX_FILENAME];
|
124
|
+
char file_name[MAX_FILENAME];
|
116
|
-
char buffer[MAX_BUFFERSIZE];
|
125
|
+
char buffer[MAX_BUFFERSIZE];
|
117
|
-
FILE *fp;
|
126
|
+
FILE *fp;
|
118
|
-
int max_gray;
|
127
|
+
int max_gray;
|
119
|
-
int x,y,k;
|
128
|
+
int x,y,k;
|
120
129
|
|
121
|
-
|
130
|
+
|
122
131
|
printf("-------------------------------------\n");
|
123
132
|
printf(" カラ-画像入力ル-チン\n");
|
124
133
|
printf("-------------------------------------\n");
|
@@ -131,7 +140,7 @@
|
|
131
140
|
exit(1);
|
132
141
|
}
|
133
142
|
|
134
|
-
|
143
|
+
|
135
144
|
fgets(buffer,MAX_BUFFERSIZE,fp);
|
136
145
|
if(buffer[0]!='P' || buffer[1]!='6'){
|
137
146
|
printf("fileのフォ-マットがP6とは異ります。\n");
|
@@ -148,7 +157,6 @@
|
|
148
157
|
}
|
149
158
|
}
|
150
159
|
|
151
|
-
/* max_grayの代入(#から始まるコメントは読み飛ばす) */
|
152
160
|
max_gray = 0;
|
153
161
|
while(max_gray == 0){
|
154
162
|
fgets(buffer, MAX_BUFFERSIZE,fp);
|
@@ -157,7 +165,6 @@
|
|
157
165
|
}
|
158
166
|
}
|
159
167
|
|
160
|
-
/* パラメ-タの画面への表示 */
|
161
168
|
printf("横の画素数 = %d, 縦の画素数 = %d\n", pXdim1, pYdim1);
|
162
169
|
printf("最大階調値 = %d\n",max_gray);
|
163
170
|
if(pXdim1 > MAX_IMAGESIZE || pYdim1 > MAX_IMAGESIZE){
|
@@ -171,7 +178,6 @@
|
|
171
178
|
exit(1);
|
172
179
|
}
|
173
180
|
|
174
|
-
/* 画像デ-タを読み込んで画像配列に代入する */
|
175
181
|
for(y=0; y<pYdim1; y++){
|
176
182
|
for(x=0;x<pXdim1; x++){
|
177
183
|
for(k=0;k<3;k++)
|
@@ -184,22 +190,12 @@
|
|
184
190
|
fclose(fp);
|
185
191
|
}
|
186
192
|
|
187
|
-
/*------------------------------------------------------------------------
|
188
|
-
関数名:save_image_ppm()
|
189
|
-
機能: 画像デ-タ、横画素数、縦画素数を書き込み。
|
190
|
-
入力: 函数の中に出力ファイル名を聞かれる。
|
191
|
-
pimage2:画像デ-タ
|
192
|
-
pXdim2:横画素数
|
193
|
-
pYdim2:縦画素数
|
194
|
-
出力: 画像ファイルである。
|
195
|
-
------------------------------------------------------------------------*/
|
196
193
|
void save_image_ppm(void)
|
197
194
|
{
|
198
|
-
char file_name[MAX_FILENAME];
|
195
|
+
char file_name[MAX_FILENAME];
|
199
|
-
FILE *fp;
|
196
|
+
FILE *fp;
|
200
|
-
int x,y,k;
|
197
|
+
int x,y,k;
|
201
198
|
|
202
|
-
/* 出力ファイルのオ-プン */
|
203
199
|
printf("------------------------------------\n");
|
204
200
|
printf(" カラ-画像(ppm形式)出力ル-チン\n");
|
205
201
|
printf("------------------------------------\n");
|
@@ -207,16 +203,11 @@
|
|
207
203
|
scanf("%s",file_name);
|
208
204
|
fp = fopen(file_name,"wb");
|
209
205
|
|
210
|
-
/* ファイル識別子 "P6" を先頭に出力する */
|
211
206
|
fputs("P6\n",fp);
|
212
|
-
/* #で始まるコメント行(省略可能) */
|
213
207
|
fputs("# Created by H.I.T\n",fp);
|
214
|
-
/* 画像の横幅、縦幅の出力 */
|
215
208
|
fprintf(fp,"%d %d\n",pXdim2,pYdim2);
|
216
|
-
/* 最大階調値の出力 */
|
217
209
|
fprintf(fp,"%d\n",MAX_BRIGHTNESS);
|
218
210
|
|
219
|
-
/* 画像デ-タの出力 */
|
220
211
|
for(y=0; y<pYdim2; y++){
|
221
212
|
for(x=0; x<pXdim2; x++){
|
222
213
|
for(k=0;k<3;k++)
|
@@ -229,23 +220,14 @@
|
|
229
220
|
fclose(fp);
|
230
221
|
}
|
231
222
|
|
232
|
-
/*------------------------------------------------------------------------
|
233
|
-
関数名:load_image_pgm()
|
234
|
-
機能: 画像デ-タ、横画素数、縦画素数を読み込み。
|
235
|
-
入力: 函数の中に入力ファイル名を聞かれる。
|
236
|
-
出力: gimage1:画像デ-タ
|
237
|
-
gXdim1:横画素数
|
238
|
-
gYdim1:縦画素数
|
239
|
-
------------------------------------------------------------------------*/
|
240
223
|
void load_image_pgm(void)
|
241
224
|
{
|
242
|
-
char file_name[MAX_FILENAME];
|
225
|
+
char file_name[MAX_FILENAME];
|
243
|
-
char buffer[MAX_BUFFERSIZE];
|
226
|
+
char buffer[MAX_BUFFERSIZE];
|
244
|
-
FILE *fp;
|
227
|
+
FILE *fp;
|
245
|
-
int max_gray;
|
228
|
+
int max_gray;
|
246
|
-
int x,y;
|
229
|
+
int x,y;
|
247
230
|
|
248
|
-
/* 入力ファイルのオ-プン */
|
249
231
|
printf("-------------------------------------\n");
|
250
232
|
printf(" モノクロ階調画像入力ル-チン\n");
|
251
233
|
printf("-------------------------------------\n");
|
@@ -258,14 +240,12 @@
|
|
258
240
|
exit(1);
|
259
241
|
}
|
260
242
|
|
261
|
-
/* ファイルタイプ(=P5)の確認 */
|
262
243
|
fgets(buffer,MAX_BUFFERSIZE,fp);
|
263
244
|
if(buffer[0]!='P' || buffer[1]!='5'){
|
264
245
|
printf("fileのフォ-マットがP5とは異ります。\n");
|
265
246
|
exit(1);
|
266
247
|
}
|
267
248
|
|
268
|
-
/* gXdim1, gYdim1の代入(#から始まるコメントは読み飛ばす) */
|
269
249
|
gXdim1 = 0;
|
270
250
|
gYdim1 = 0;
|
271
251
|
while(gXdim1 == 0 || gYdim1 == 0){
|
@@ -275,7 +255,6 @@
|
|
275
255
|
}
|
276
256
|
}
|
277
257
|
|
278
|
-
/* max_grayの代入(#から始まるコメントは読み飛ばす) */
|
279
258
|
max_gray = 0;
|
280
259
|
while(max_gray == 0){
|
281
260
|
fgets(buffer, MAX_BUFFERSIZE,fp);
|
@@ -284,7 +263,6 @@
|
|
284
263
|
}
|
285
264
|
}
|
286
265
|
|
287
|
-
/* パラメ-タの画面への表示 */
|
288
266
|
printf("横の画素数 = %d, 縦の画素数 = %d\n", gXdim1, gYdim1);
|
289
267
|
printf("最大階調値 = %d\n",max_gray);
|
290
268
|
if(gXdim1 > MAX_IMAGESIZE || gYdim1 > MAX_IMAGESIZE){
|
@@ -298,7 +276,6 @@
|
|
298
276
|
exit(1);
|
299
277
|
}
|
300
278
|
|
301
|
-
/* 画像デ-タを読み込んで画像配列に代入する */
|
302
279
|
for(y=0; y<gYdim1; y++){
|
303
280
|
for(x=0;x<gXdim1; x++){
|
304
281
|
gimage1[y][x] = (unsigned char)fgetc(fp);
|
@@ -310,22 +287,12 @@
|
|
310
287
|
fclose(fp);
|
311
288
|
}
|
312
289
|
|
313
|
-
/*------------------------------------------------------------------------
|
314
|
-
関数名:save_image_pgm()
|
315
|
-
機能: 画像デ-タ、横画素数、縦画素数を書き込み。
|
316
|
-
入力: 函数の中に出力ファイル名を聞かれる。
|
317
|
-
gimage2:画像デ-タ
|
318
|
-
gXdim2:横画素数
|
319
|
-
gYdim2:縦画素数
|
320
|
-
出力: 画像ファイルである。
|
321
|
-
------------------------------------------------------------------------*/
|
322
290
|
void save_image_pgm(void)
|
323
291
|
{
|
324
|
-
char file_name[MAX_FILENAME];
|
292
|
+
char file_name[MAX_FILENAME];
|
325
|
-
FILE *fp;
|
293
|
+
FILE *fp;
|
326
|
-
int x,y;
|
294
|
+
int x,y;
|
327
295
|
|
328
|
-
/* 出力ファイルのオ-プン */
|
329
296
|
printf("------------------------------------\n");
|
330
297
|
printf(" モノクロ階調画像(pgm形式)出力ル-チン\n");
|
331
298
|
printf("------------------------------------\n");
|
@@ -333,16 +300,11 @@
|
|
333
300
|
scanf("%s",file_name);
|
334
301
|
fp = fopen(file_name,"wb");
|
335
302
|
|
336
|
-
/* ファイル識別子 "P5" を先頭に出力する */
|
337
303
|
fputs("P5\n",fp);
|
338
|
-
/* #で始まるコメント行(省略可能) */
|
339
304
|
fputs("# Created by H.I.T\n",fp);
|
340
|
-
/* 画像の横幅、縦幅の出力 */
|
341
305
|
fprintf(fp,"%d %d\n",gXdim2,gYdim2);
|
342
|
-
/* 最大階調値の出力 */
|
343
306
|
fprintf(fp,"%d\n",MAX_BRIGHTNESS);
|
344
307
|
|
345
|
-
/* 画像デ-タの出力 */
|
346
308
|
for(y=0; y<gYdim2; y++){
|
347
309
|
for(x=0; x<gXdim2; x++){
|
348
310
|
fputc(gimage2[y][x],fp);
|
@@ -364,6 +326,8 @@
|
|
364
326
|
|
365
327
|
##### 上記の詳細・結果
|
366
328
|
疑似カラー変換関数を調べてプログラムに実装したが、うまく画像が生成されなかった。
|
329
|
+
また、ChatGPTを使って、プログラムをAIに作成してもらったが、疑似カラー変換関数を用いた実行方法は出てこなかった。
|
367
330
|
|
331
|
+
|
368
332
|
### 補足
|
369
333
|
特になし
|