ページ 11

0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月17日(月) 16:46
by wing27th
seikika.txtに出力された0~255に正規化されたデータを580×419の白黒画像に画像化したいのですが、うまく表示出来ません。
教えてください。

//uv_data_All.txtから視差マップを作るプログラム

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include "header.h"
#define XSIZE 704
#define YSIZE 480
#define shisaXSIZE 580
#define shisaYSIZE 419


//最大値を求める
void GetMax(double *MaxX, double *MaxY)
{
FILE *fp;
double x1,y1,x2,y2;
*MaxX = 0.0;
*MaxY = 0.0;
double d;

if((fp = fopen("./Result/uv_data_All.txt","r"))==NULL){
}else
while(fscanf(fp, "%lf %lf %lf %lf",&x1,&y1,&x2,&y2) != EOF)
{
d=x1-x2;
if(*MaxX < d)
*MaxX = d;
}
fclose(fp);
}

//正規化する
void Normalization(double MaxX,double MaxY)
{
FILE *fp;
FILE *fp2;
double x1,y1,x2,y2;
double d;
int n;
if((fp = fopen("./Result/uv_data_All.txt","r"))==NULL){

}else
fp2=fopen("./Result/seikika.txt","w"); //seikika.txtの作成
while(fscanf(fp, "%lf %lf %lf %lf",&x1,&y1,&x2,&y2) != EOF)
{
d=x1-x2;
n= (int)( d / MaxX * 255);
//printf("%lf %lf uv:%lf 正規化:%d\n",x1,x2,d,n);
fprintf(fp2,"%d\n",n); //seikika.txtに正規化した値を書き込む
}
fclose(fp);
fclose(fp2);

}


int main(int argc,char **argv)
{
FILE *fp;
FILE *fp2;
FILE *fp3;
int data=0;
unsigned char n;
double x1;
double y1;
double x2;
double y2;
double max=0;
double *shisa=NULL;

unsigned char *depthmap=NULL;
double MaxX = 0.0;
double MaxY = 0.0;
//unsigned char test;

shisa=(double *)malloc((sizeof(double))*XSIZE*YSIZE);
depthmap=(unsigned char *)malloc((sizeof(unsigned char))*shisaXSIZE*shisaYSIZE);


if((fp=fopen("./Result/uv_data_All.txt","r")) == NULL){
printf("ファイルを読み込みできません。\n");
exit(1);
}
else{
printf("ファイル読み込み完了しました。\n");
fread(shisa,1,XSIZE*YSIZE,fp);
//fclose(fp);
//}

while(fscanf(fp,"%lf%lf%lf%lf",&x1,&y1,&x2,&y2) == 4){
//printf("%f %f %f %f 動きベクトルの大きさ%f\n",x1,y1,x2,y2,x1-x2);
// if(x1-x2>max){
// max=x1-x2;
// }
data++;
}
printf("--------------------------------------------\n");
GetMax(&MaxX,&MaxY); //最大値を求めるプログラムGetMaxの挿入
printf("最大値%lf\n",MaxX);
Normalization(MaxX,MaxY); //0~255に正規化するグログラムNormalizationの挿入
fclose(fp);
}

printf("視差マップを作成します。\n");
if((fp2=fopen("./Result/seikika.txt","r"))==NULL){ //seikika.txtのファイルを開く
printf("./Result/seikika.txtをと読み込み出来ません\n");
}else
while(fscanf(fp2,"%d\n",&n) != EOF){ //seikika.txtのデータを読み込む
depthmap=(unsigned char*)(n); //unsigned char型のdepthmapにデータを入れる
}
if((fp3=fopen("./Output/depthmap.raw","w")) == NULL){
printf("視差マップ作成できません。\n");
}
else{
printf("視差マップ(depthmap.raw)を作成しました。\n");
fwrite(depthmap,sizeof(unsigned char),shisaXSIZE*shisaYSIZE,fp3);
free(depthmap); //メモリの解放
fclose(fp2);
fclose(fp3);
}

return 0;
}

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月17日(月) 16:47
by h2so5
どう上手くいかないかを説明してください。
そもそも、画像を表示するようなコードが見当たりません。

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月17日(月) 16:52
by wing27th
ビルドは出来ています。正規化した値がseikika.txtに出力できているので、

画像を表示するコードがそもそもわかりません。画像の表示の仕方を教えてください。

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月17日(月) 16:59
by wing27th
本当にプログラミング初心者なので1から教えていただきたいです。

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月17日(月) 17:50
by h2so5
このプログラムは「画像化」が目的ですよね。画像を表示する必要はあるんでしょうか。

そして、110行目のコードがどのような処理をしているか説明してください。

コード:

//uv_data_All.txtから視差マップを作るプログラム

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include "header.h"
#define XSIZE 704
#define YSIZE 480
#define shisaXSIZE 580
#define shisaYSIZE 419


//最大値を求める
void GetMax(double *MaxX, double *MaxY)
{
	FILE *fp;
	double x1,y1,x2,y2;
	*MaxX = 0.0;
	*MaxY = 0.0;
	double d;

	if((fp = fopen("./Result/uv_data_All.txt","r"))==NULL){
	}else
		while(fscanf(fp, "%lf %lf %lf %lf",&x1,&y1,&x2,&y2) != EOF)
		{
			d=x1-x2;
			if(*MaxX < d)
				*MaxX = d;
		}
		fclose(fp);
}

//正規化する
void Normalization(double MaxX,double MaxY)
{
	FILE *fp;
	FILE *fp2;
	double x1,y1,x2,y2;
	double d;
	int n;
	if((fp = fopen("./Result/uv_data_All.txt","r"))==NULL){

	}else
		fp2=fopen("./Result/seikika.txt","w");	 //seikika.txtの作成
	while(fscanf(fp, "%lf %lf %lf %lf",&x1,&y1,&x2,&y2) != EOF)
	{
		d=x1-x2;
		n= (int)( d / MaxX * 255);
		//printf("%lf %lf uv:%lf 正規化:%d\n",x1,x2,d,n);	
		fprintf(fp2,"%d\n",n);	 //seikika.txtに正規化した値を書き込む
	}
	fclose(fp);
	fclose(fp2);

}


int main(int argc,char **argv)
{
	FILE *fp;
	FILE *fp2;
	FILE *fp3;
	int data=0;
	unsigned char n;
	double x1;
	double y1;
	double x2;
	double y2;
	double max=0;
	double *shisa=NULL;

	unsigned char *depthmap=NULL;
	double MaxX = 0.0;
	double MaxY = 0.0;
	//unsigned char test;

	shisa=(double *)malloc((sizeof(double))*XSIZE*YSIZE);
	depthmap=(unsigned char *)malloc((sizeof(unsigned char))*shisaXSIZE*shisaYSIZE);


	if((fp=fopen("./Result/uv_data_All.txt","r")) == NULL){
		printf("ファイルを読み込みできません。\n");
		exit(1);
	}
	else{
		printf("ファイル読み込み完了しました。\n");
		fread(shisa,1,XSIZE*YSIZE,fp);
		//fclose(fp);
		//}

		while(fscanf(fp,"%lf%lf%lf%lf",&x1,&y1,&x2,&y2) == 4){
			//printf("%f %f %f %f 動きベクトルの大きさ%f\n",x1,y1,x2,y2,x1-x2);
			//	 if(x1-x2>max){
			//	 max=x1-x2;
			//	 }
			data++;
		}
		printf("--------------------------------------------\n");
		GetMax(&MaxX,&MaxY);	 //最大値を求めるプログラムGetMaxの挿入
		printf("最大値%lf\n",MaxX);
		Normalization(MaxX,MaxY);	//0~255に正規化するグログラムNormalizationの挿入
		fclose(fp);
	}

	printf("視差マップを作成します。\n");
	if((fp2=fopen("./Result/seikika.txt","r"))==NULL){	 //seikika.txtのファイルを開く
		printf("./Result/seikika.txtをと読み込み出来ません\n");
	}else
		while(fscanf(fp2,"%d\n",&n) != EOF){	 //seikika.txtのデータを読み込む
			depthmap=(unsigned char*)(n);	 //unsigned char型のdepthmapにデータを入れる
		}
		if((fp3=fopen("./Output/depthmap.raw","w")) == NULL){ 
			printf("視差マップ作成できません。\n");
		}
		else{
			printf("視差マップ(depthmap.raw)を作成しました。\n");
			fwrite(depthmap,sizeof(unsigned char),shisaXSIZE*shisaYSIZE,fp3);
			free(depthmap);	 //メモリの解放
			fclose(fp2);
			fclose(fp3);
		}

		return 0;
}

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月18日(火) 15:46
by wing27th
2枚の画像から動きベクトルの長さを求めて、0~255に正規化した値を視差マップとして出したいのですが。

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月18日(火) 22:45
by Ryo
http://detail.chiebukuro.yahoo.co.jp/qa ... 1098814915
画像サイズやファイル名などから同じ方でしょうか?

Re: 0~255に正規化した値を580×419の白黒画像に画像化したい

Posted: 2012年12月18日(火) 22:57
by softya(ソフト屋)
マルチポストっぽいですね。あるいは同じ課題か。
「0~255の値が出力されているファイルから白黒画像に画像化したいです。 - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 1098814915
マルチポストの場合は相互リンクが必須です。 フォーラムルール → http://dixq.net/board/board.html