C言語を用いた画像処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
まろ

C言語を用いた画像処理について

#1

投稿記事 by まろ » 14年前

コード:

コード:

失礼します。質問させて下さい。
画像ファイルから輝度値を読み込みCSVファイルに書き出すプログラムを作成しています。
画像は幅2048pixel×高さ32768pixelのRAW画像ファイルです。
サイズは134,217,768 バイトでヘッダーが40バイトあります。
画像は白黒10ビットで取得し2バイトに格納されています。
なので例えばバイナリで「C0 01」だと「01 C0」に入れ替えて「1C0」にして
2^10/2^16を掛けて10進数に変換すれば「7」となり輝度値が求まります。

そこで以下のようなプログラムを考えたのですが、
freadで2バイト取得して処理して書き込みしてをファイル終わりまで
繰り返せばいいと思ったのですが上手くいきません。whileループでエラーが・・・
詳しい方、どうか教えて下さい。

コード:

#include <stdio.h>
#include<math.h>
#include<stdlib.h>
int main(void)
{
  FILE *fp, *OUT;
  unsigned char header[40];
  unsigned char buf[64];
  unsigned char buf5[64];
  int  i,j,c;
  char st2[]=".raw";
  char st1[64];
  char str1[64];

  printf("バイナリファイル名を入力してください\n");
	printf("例(neko.raw→neko)\n");
	gets(st1);
	printf("よみこんだんよ\n");
	sprintf_s(str1,"%s%s",st1,st2);

  fp = fopen( str1, "rb" );		//RAWファイル読み込み
  if( fp == NULL ){
    printf( "%sファイルがないです", st1 );
	getchar();
    return -1;
  }

  fread(header,1,40,fp);	//ヘッダー部は切り捨て
  c=0;
  while(fread( buf5, 1, 2, fp )==2){	//2バイトずつバイナリを読み込み
  
	buf[0]=(buf5[1]*256+buf5[0])*1024/65536;	//入替&計算
	
	OUT=fopen("kidochi.csv","w");

	fprintf(OUT,"%02d,",buf[0]);	//CSVファイルに輝度値を書き込み

	c=c+1;
	if(c%2048==0){
		fputc('\n',OUT);	//幅2048pixで改行
	}
  }

  fclose( fp );
  fclose( OUT );
  getchar();
  return 0;
}

non
記事: 1097
登録日時: 15年前

Re: C言語を用いた画像処理について

#2

投稿記事 by non » 14年前

どううまくいかないのか?何というエラーが出るのか示してください。
ファイルは正しくオープンできているのでしょうね?
sprintf_sの引数が合わないと思うけど。
non

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: C言語を用いた画像処理について

#3

投稿記事 by h2so5 » 14年前

34行目とか明らかにおかしいですよね。

まろ

Re: C言語を用いた画像処理について

#4

投稿記事 by まろ » 14年前

non さんが書きました:どううまくいかないのか?何というエラーが出るのか示してください。
ファイルは正しくオープンできているのでしょうね?
sprintf_sの引数が合わないと思うけど。
初心者で申し訳ありません。
File: f:\dd\vctools\crt_bld\self_x86\crt\src\fprintf.c
Line: 55
Expression: (str!=NULL)
とでてきます。ファイルは読み込めてるようなので
sprintf_sは動いているとは思うのですが・・・

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: C言語を用いた画像処理について

#5

投稿記事 by h2so5 » 14年前

まろ さんが書きました: File: f:\dd\vctools\crt_bld\self_x86\crt\src\fprintf.c
Line: 55
Expression: (str!=NULL)
おそらく、OUTがNULLだからこのエラーが出ていると思います。
理由は34行目を見てよく考えてください。

tamaneko

Re: C言語を用いた画像処理について

#6

投稿記事 by tamaneko » 14年前

プログラムはじめて日が浅いんですが、下記のようにしているのはなぜですか
34行目のfopenはfcloseしていないのに、whileでループする度にfopenを
繰り返しているんですが、そうする理由なんですか?
fopenはwで上書き指定なんですが、こうしている理由なんですか?

まろ

Re: C言語を用いた画像処理について

#7

投稿記事 by まろ » 14年前

tamaneko さんが書きました:プログラムはじめて日が浅いんですが、下記のようにしているのはなぜですか
34行目のfopenはfcloseしていないのに、whileでループする度にfopenを
繰り返しているんですが、そうする理由なんですか?
fopenはwで上書き指定なんですが、こうしている理由なんですか?
>whileでループする度にfopenを繰り返している
たしかにそうでした。fopenをwhile文から出したらエラーがなくなってうまくいきました。
皆様ご指導ご鞭撻ありがとうございました、勉強になりました。

閉鎖

“C言語何でも質問掲示板” へ戻る