dポイントプレゼントキャンペーン実施中!

OpenCv 透明度について

透明度を表すRGBAのA(アルファチャネル)をいじって画像の透明にしたいのですが、いじってみてもなにも変化がありません。
なにが悪いのかわかりません


↓こんな感じでやってます。

// 画像を読み込む
src_img = cvLoadImage(src_imgfile,CV_LOAD_IMAGE_COLOR);

//RGBA変換
dst_img = cvCreateImage(cvGetSize(bg_img),IPL_DEPTH_8U,4);
cvCvtColor(bg_img,dst_img,CV_RGB2RGBA);

//透明度をいじる
for ( int y = 0 ; y < dst_img->height ; y++ )
{
for ( int x = 0 ; x < dst_img->width ; x++ )
{

dst_img->imageData[dst_img->widthStep * y + x * 4 + 3] = -255;

}
}

A 回答 (1件)

http://opencv.jp/opencv-2.1/c/drawing_functions. …
>また,この関数は,アルファ透過をサポートしません.目的画像が4チャンネルである場合でも color[3] には,単に新たなピクセル値がコピーされるだけです.したがって,もし半透明な形状を描画したい場合は,それを別のバッファに描画してから画像とブレンドするとよいでしょう.

http://opencv.jp/opencv-2.1/c/reading_and_writin …
> cv::LoadImage
> 現在の実装では,アルファチャンネルがもしあったとしても,出力画像からは取り除かれることに注意してください.例えば,4チャンネルRGBA画像は,RGB画像として読み込まれます

>cv::SaveImage
> この関数では,8ビットシングルチャンネル,あるいは3チャンネル(チャンネルは ‘BGR’ の順番)画像のみを保存することができます


以上のように、4チャンネルの画像を作ることはできますが、それをファイルに読み書きしたり、画面表示したりはできません。
アルファチャンネルに対応した別のライブラリを使うなどの工夫が必要です。
    • good
    • 0
この回答へのお礼

情報提供ありがとうございます。
大変参考になりました。

お礼日時:2010/06/29 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!