質問するログイン新規登録

質問編集履歴

2

問題点の絞り込み

2024/06/14 14:31

投稿

kouchan_dd
kouchan_dd

スコア20

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またはvoid mainの中身をどのように書き換えれば、画像が正しく生成されるかを教えていただきたいです。
25
+ ヘッダファイルの内容は変更せずに、void equalityの中身をどのように書き換えれば、画像が正しく生成されるかを教えていただきたいです。
25
26
 
26
27
  なお、実行すると下記のような画面になりました。
27
28
  -------------------------------------

1

文字数制限の上限まで書いていたので、ヘッダファイルのコメントをすべて削除した。 また、具体的なエラーメッセージを追加した。

2024/06/14 14:12

投稿

kouchan_dd
kouchan_dd

スコア20

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
- /* ファイルタイプ(=P6)の確認 */
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
  特になし