C++ bmp画像のコントラスト改善について
Posted: 2014年7月06日(日) 14:11
.bmp画像のコントラストの改善をσスケーリングで行いたいのですが。
サンプルが少なく理解が進みません。
code
// Bitmapファイルを読み込んで,
// 別のファイルに出力するだけのプログラムです
#include<stdio.h>
#define XSIZE 256 /* 画像の横サイズ */
#define YSIZE 256 /* 画像の縦サイズ */
void main(void)
{
int x,y;
char fni[40],fno[40]; /* 入力ファイルと出力ファイルの名前を格納するための配列 */
unsigned char head[1078],buf[YSIZE][XSIZE]; /* 入力ファイル(ビットマップファイル)のヘッダ情報と輝度値情報を格納するための配列 */
unsigned char in_image[YSIZE][XSIZE]; /* 入力画像の画素の輝度値 を格納するための配列 */
unsigned char out_image[YSIZE][XSIZE]; /* 出力画像の画素の輝度値 を格納するための配列 */
FILE *fp,*fp2; /* ファイルポインタ */
printf("ファイル名を入れてください:");
scanf("%s",fni);
fp=fopen(fni,"rb"); /* 読み込み & バイナリモードでオープンする */
/* 配列 head にビットマップファイルのヘッダ情報が格納されます */
fread(head,sizeof(unsigned char),1078,fp); /* unsigned char 型のデータ×1078個を配列 head に読み込む */
/* 配列 buf にビットマップファイルの輝度値情報が格納されます */
fread(buf,sizeof(unsigned char),XSIZE*YSIZE,fp);
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
in_image[y][x]=buf[y][x]; /* 画像の左下の画素が座標 buf[0][0] です*/
}
}
printf("読み込み終了しました!\n");
printf("出力ファイル名を入れてください:");
scanf("%s",fno);
/*******↓基本的には、この範囲に画像処理プログラムを書く****/
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
out_image[y][x]=in_image[y][x];
}
}
/********↑**************************************************/
fp2=fopen(fno,"wb"); /* 書き込み & バイナリモードでオープンする */
/* 配列 head の内容を出力ファイルに書き込む */
fwrite(head,sizeof(unsigned char),1078,fp2);
/* 配列 out_image の内容を出力ファイルに書き込む */
fwrite(out_image,sizeof(unsigned char),XSIZE*YSIZE,fp2);
fclose(fp); /* ファイルをクローズする */
fclose(fp2); /* ファイルをクローズする */
printf("作業完了!\n");
}
/code
雛形となるものはこれです。
どうしてもできないのでどなたかご協力お願いします
サンプルが少なく理解が進みません。
code
// Bitmapファイルを読み込んで,
// 別のファイルに出力するだけのプログラムです
#include<stdio.h>
#define XSIZE 256 /* 画像の横サイズ */
#define YSIZE 256 /* 画像の縦サイズ */
void main(void)
{
int x,y;
char fni[40],fno[40]; /* 入力ファイルと出力ファイルの名前を格納するための配列 */
unsigned char head[1078],buf[YSIZE][XSIZE]; /* 入力ファイル(ビットマップファイル)のヘッダ情報と輝度値情報を格納するための配列 */
unsigned char in_image[YSIZE][XSIZE]; /* 入力画像の画素の輝度値 を格納するための配列 */
unsigned char out_image[YSIZE][XSIZE]; /* 出力画像の画素の輝度値 を格納するための配列 */
FILE *fp,*fp2; /* ファイルポインタ */
printf("ファイル名を入れてください:");
scanf("%s",fni);
fp=fopen(fni,"rb"); /* 読み込み & バイナリモードでオープンする */
/* 配列 head にビットマップファイルのヘッダ情報が格納されます */
fread(head,sizeof(unsigned char),1078,fp); /* unsigned char 型のデータ×1078個を配列 head に読み込む */
/* 配列 buf にビットマップファイルの輝度値情報が格納されます */
fread(buf,sizeof(unsigned char),XSIZE*YSIZE,fp);
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
in_image[y][x]=buf[y][x]; /* 画像の左下の画素が座標 buf[0][0] です*/
}
}
printf("読み込み終了しました!\n");
printf("出力ファイル名を入れてください:");
scanf("%s",fno);
/*******↓基本的には、この範囲に画像処理プログラムを書く****/
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++){
out_image[y][x]=in_image[y][x];
}
}
/********↑**************************************************/
fp2=fopen(fno,"wb"); /* 書き込み & バイナリモードでオープンする */
/* 配列 head の内容を出力ファイルに書き込む */
fwrite(head,sizeof(unsigned char),1078,fp2);
/* 配列 out_image の内容を出力ファイルに書き込む */
fwrite(out_image,sizeof(unsigned char),XSIZE*YSIZE,fp2);
fclose(fp); /* ファイルをクローズする */
fclose(fp2); /* ファイルをクローズする */
printf("作業完了!\n");
}
/code
雛形となるものはこれです。
どうしてもできないのでどなたかご協力お願いします