fscanfが正しく出力できません
Posted: 2014年7月27日(日) 19:15
実験上必要なデータをcsvファイルとして出力し、その値を別のプログラムで用いるためにfscanff関数を使いました。
しかし数値がすべて0となってしまっています。
初期化しないとすべての値がぶっ飛んで表示されるため個人的にはfscanf関数が動作していないのではないかと考えました。
この原因および解決策をご教授いただきたいです。
以下二通りの方法で試したソースを張っておきます。
また、3つ目のソースは別プログラムの今回読み込もうとしているcsvファイルを作成している過程です。
概要としてはDCT後に正規化、二値化した64×64画素の行列で、うまくいくと0と255が組み合わさった行列が出力されるはずで、csvファイルにはきれいに出力されております。
お手数ですがよろしくお願いします。
しかし数値がすべて0となってしまっています。
初期化しないとすべての値がぶっ飛んで表示されるため個人的にはfscanf関数が動作していないのではないかと考えました。
この原因および解決策をご教授いただきたいです。
以下二通りの方法で試したソースを張っておきます。
また、3つ目のソースは別プログラムの今回読み込もうとしているcsvファイルを作成している過程です。
概要としてはDCT後に正規化、二値化した64×64画素の行列で、うまくいくと0と255が組み合わさった行列が出力されるはずで、csvファイルにはきれいに出力されております。
お手数ですがよろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i,j;
double val[64][64];
int block=64;
FILE *fp,*fp2;
fp=fopen("45.csv","r");
for(i=0;i<block;i++){
for(j=0;j<block;j++){
fscanf(fp,"%f",&val[i][j]);
}
}
fp2=fopen("452.csv","w");
for(i=0;i<block;i++){
for(j=0;j<block;j++)fprintf(fp2,",%f",val[i][j]);
fprintf(fp2,"\n");
}
fclose(fp);
fclose(fp2);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "opencv/cv.h"
#include "opencv/cxcore.h"
#include "opencv/highgui.h"
int main(void){
FILE *fp,*fp2;
int i,j;
IplImage* val=0;
val=::cvCreateImage(cvSize(64, 64), IPL_DEPTH_8U, 1);
cvNamedWindow("val", CV_WINDOW_AUTOSIZE);
int block=64;
fp=fopen("45.csv","r");
fp2=fopen("g.csv","w");
for(i = 0; i < block; i++){
for(j = 0; j < block; j++){
fscanf(fp,"%lf",val->imageData[i* val->widthStep +j]);
fprintf(fp2,",%lf",val->imageData[i* val->widthStep +j]);
}
fprintf(fp2,"\n");
}
::cvShowImage("val",val);
::cvReleaseImage(&val);
::cvDestroyWindow("val");
}
void ShowDCTImage(double **dst, int Width, int Height, double Amp, char* WindowName){
FILE *f;
f=fopen("TheoreticalValue.csv","w+");
IplImage*GrayDstImage=::cvCreateImage(cvSize(Width, Height), IPL_DEPTH_8U, 1);
char FileName[260] = {0};
double Maximum = 0.0;
double Minimum = 0.0;
double Temp = 0.0,Temp2=0.0;
int block=64;
for(int i = 0; i <block; i++){
for(int j = 0; j <block; j++){
Temp = (dst[i][j] < 0)?(-1.0)*dst[i][j]:dst[i][j];
if(Maximum < Temp){
Maximum = Temp;
}
}
}
Maximum /= 255.0 * Amp;
for(int a = 0; a < block; a++){
for(int b = 0; b < block; b++){
Temp = (dst[a][b] < 0)?(-1.0)*dst[a][b]:dst[a][b];
Temp2=(unsigned char)(Temp/Maximum );
if(Temp2>100)Temp2=255;
else Temp2=0;
GrayDstImage->imageData[a * GrayDstImage->widthStep +b] = Temp2;
fprintf(f,",%f",Temp2);
}
fprintf(f,"\n");
sprintf(FileName, "%s.png", WindowName);
}
::cvSaveImage(FileName, GrayDstImage);
::cvNamedWindow(WindowName);
::cvShowImage(WindowName, GrayDstImage);
::cvReleaseImage(&GrayDstImage);
fclose(f);
}