2値化プログラム
Posted: 2007年1月22日(月) 17:45
BMPを2値化処理して、2値化されたものをBMPとして保存したいのですが、保存方法がわかりません。そもそも2値化の閾値は濃度平均を境に白と黒に分ける方法であっていますでしょうか?
以下が作りかけのプログラムです。
#include <stdio.h>
int main(void)
{
FILE *fp;
int wide,hite,cm;
int v[256][256];
int h[54],palette[1024];
int i,j,a,b,x,n;
int heikin,sum=0;
/*1枚目の画像data*/
fp=fopen("c.bmp","rb"); // mono画像ファイルを開く
if(fp==NULL){
printf("エラー\n");
return 1; }
for(j=0; j<54; j++) h[j]=fgetc(fp); // ヘッダの読み込み
wide=h[18]+h[19]*256; // 画像の幅の計算
hite=h[22]+h[23]*256; // 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++) palette[j]=fgetc(fp);
//mono画像データ読み込み
for(a=0; a<hite; a++)for(b=0; b<wide; b++){
v[a]=fgetc(fp); //濃度値を取得
n=v[a];
sum+=n; //濃度値合計sum
heikin=sum/(wide*hite); //閾値を決めるためのheikin
if(n>heikin) n=0; //濃度値がheikin以上なら黒
else n=255; //以下なら白にする
printf("v=%d\n",n);
}
return 0;
}
以下が作りかけのプログラムです。
#include <stdio.h>
int main(void)
{
FILE *fp;
int wide,hite,cm;
int v[256][256];
int h[54],palette[1024];
int i,j,a,b,x,n;
int heikin,sum=0;
/*1枚目の画像data*/
fp=fopen("c.bmp","rb"); // mono画像ファイルを開く
if(fp==NULL){
printf("エラー\n");
return 1; }
for(j=0; j<54; j++) h[j]=fgetc(fp); // ヘッダの読み込み
wide=h[18]+h[19]*256; // 画像の幅の計算
hite=h[22]+h[23]*256; // 画像の高さの計算
cm=h[28];
if(cm=8)for(j=0; j<1024; j++) palette[j]=fgetc(fp);
//mono画像データ読み込み
for(a=0; a<hite; a++)for(b=0; b<wide; b++){
v[a]=fgetc(fp); //濃度値を取得
n=v[a];
sum+=n; //濃度値合計sum
heikin=sum/(wide*hite); //閾値を決めるためのheikin
if(n>heikin) n=0; //濃度値がheikin以上なら黒
else n=255; //以下なら白にする
printf("v=%d\n",n);
}
return 0;
}