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;
}
0~255に正規化した値を580×419の白黒画像に画像化したい
Re: 0~255に正規化した値を580×419の白黒画像に画像化したい
どう上手くいかないかを説明してください。
そもそも、画像を表示するようなコードが見当たりません。
そもそも、画像を表示するようなコードが見当たりません。
-
wing27th
Re: 0~255に正規化した値を580×419の白黒画像に画像化したい
ビルドは出来ています。正規化した値がseikika.txtに出力できているので、
画像を表示するコードがそもそもわかりません。画像の表示の仕方を教えてください。
画像を表示するコードがそもそもわかりません。画像の表示の仕方を教えてください。
Re: 0~255に正規化した値を580×419の白黒画像に画像化したい
このプログラムは「画像化」が目的ですよね。画像を表示する必要はあるんでしょうか。
そして、110行目のコードがどのような処理をしているか説明してください。
そして、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;
}
-
wing27th
Re: 0~255に正規化した値を580×419の白黒画像に画像化したい
2枚の画像から動きベクトルの長さを求めて、0~255に正規化した値を視差マップとして出したいのですが。
-
Ryo
Re: 0~255に正規化した値を580×419の白黒画像に画像化したい
http://detail.chiebukuro.yahoo.co.jp/qa ... 1098814915
画像サイズやファイル名などから同じ方でしょうか?
画像サイズやファイル名などから同じ方でしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 0~255に正規化した値を580×419の白黒画像に画像化したい
マルチポストっぽいですね。あるいは同じ課題か。
「0~255の値が出力されているファイルから白黒画像に画像化したいです。 - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 1098814915
マルチポストの場合は相互リンクが必須です。 フォーラムルール → http://dixq.net/board/board.html
「0~255の値が出力されているファイルから白黒画像に画像化したいです。 - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 1098814915
マルチポストの場合は相互リンクが必須です。 フォーラムルール → http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。