2値化プログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
若旦那

2値化プログラム

#1

投稿記事 by 若旦那 » 17年前

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;
}


若旦那

Re:2値化プログラム

#3

投稿記事 by 若旦那 » 17年前

バグさんありがとうございます!

2値化はどうにかできました。☆

次に2値化したのを画像として保存したいのですが、
BMPの保存の仕方がわからなくて困っています。

とりあえず私の作ったプログラムはこれです。

#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;
double heikin;
int sum=0;




fp=fopen("5.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); //濃度値を取得


sum+=v[a]; //濃度値合計sum
}

heikin=sum/(wide*hite); //閾値を決めるためのheikin
printf("heikin=%f\n",heikin);

for(a=0; a<hite; a++)for(b=0; b<wide; b++){
n=v[a];
if(n>heikin) n=0; //濃度値がheikin以上なら黒
else n=255; //以下なら白にする

printf("v=%d\n",n);

}
return 0;
}

box

Re:2値化プログラム

#4

投稿記事 by box » 17年前

向こうの掲示板で話が順調に進んでいるようですので、
別件と同様、こちらはクローズしておいてください。

若旦那

Re:2値化プログラム

#5

投稿記事 by 若旦那 » 17年前

マナー違反でした。
すみません。以後気をつけます。

閉鎖

“C言語何でも質問掲示板” へ戻る