画像のアルファ合成

cvLoadImageは読み込む画像のアルファチャネルを無視するので,画像を重ねあわせるときに不都合.opencv内で何かしらのマスク画像を生成し,そいつを使って重ねあわせる(参考:opencv.jp - OpenCV: コピーと充填(Copying and Filling)サンプルコード -)こともできるけど,ImageMagickのConvertツールを使えばとても簡単.

convert foo.png -channel Alpha -negate -separate foomask.png

後は,cvCopyを呼ぶときにこのマスク画像を使えばOK.

IplImage* target = cvLoadImage("target.png");
IplImage* foo = cvLoadImage("foo.png");
IplImage* foomask = cvLoadImage("foomask.png");

cvCopy(foo, target, foomask);

ちなみに単に画像全体を重み付きで合成するなら,cvAddWeightedでOK.