BMP画像ファイルの読み書き
Visual StudioのC言語により、ビットマップ形式の画像に対するプログラミングで
簡単な背景差分のプログラムを作成しています。
背景画像と対象画像2枚を読み込み色の差を取り、
差の値が背景の値と近ければ背景とみなし白で塗りつぶし、
物体だけを表示した画像を生成するようなプログラムです。
1枚のみの画像は以下のプログラムで作動しますが、連続した画像(01.bmp 02.bmp ・・・・100.bmp)
を読み込み上記の処理をする場合にはどうすればよいのでしょうか?
分かりにくくて申し訳ないですが、よろしくお願いします。
#include "BMPData.h"
#include <math.h>
int main(){
int a=150;
int i,j;
int r,g,b;
int ir,ig,ib;
int diff;
BMPStruct bmp_bg;
BMPStruct bmp_oj;
BMPStruct bmp;
RGB rgb_bg;
RGB rgb_oj;
RGB rgb;
RGB rgb_w;
rgb.r = 255;
rgb.g = 255;
rgb.b = 255;
rgb_w.r = 0;
rgb_w.g = 0;
rgb_w.b = 0;
readBMP(&bmp_bg, "back.bmp"); //背景画像の読み込み
readBMP(&bmp_oj, "01.bmp"); //対象画像の読み込み
makeBMP(&bmp,640, 480, rgb); //出力用画像を生成する
for(i=0; i<640; i++){
for(j=0; j<480; j++){
getColor(bmp_bg, &rgb_bg,i,j); //背景画像の色を取得
getColor(bmp_oj, &rgb_oj,i,j); //対象画像の色を取得
//rgbそれぞれの値の差
r = rgb_bg.r - rgb_oj.r;
g = rgb_bg.g - rgb_oj.g;
b = rgb_bg.b - rgb_oj.b;
//絶対値
ir = abs(r);
ig = abs(g);
ib = abs(b);
//色の差
diff = ir + ig + ib;
//背景かどうかの判定
if(diff>a){
putColor(bmp, rgb_w, i, j); //色の差が大きければ出力画像に対象画像の色をそのまま出力
}
else{
putColor(bmp, rgb, i, j); //色の差が小さければ白を出力
}
}
}
writeBMP(bmp, "image01.bmp");
}
お礼
ご回答ありがとうございます。 「な~んだ。簡単にできるじゃない」こんな簡単なことに気が付かなかった私が情けないです。 まさしく、2つの色でそれぞれのレイヤーを塗りつぶし上位のレイヤーの透過度を50%すれば同比率の混合された色を知ることができますね。 たいへん助かりました。重ねてお礼申し上げます。