Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8901

[C#]OpenCvSharp3を使ってPictureBoxのImageに矩形を描画すると色が消える問題

$
0
0

問題

OpenCvSharp3を使ってビットマップ化したPictureBoxのImageに矩形を描画をすると、再度ビットマップ化したときに色情報が落ちてしまう。
PNGをビットマップ化した場合は問題なかったので違いを調べてみた。

コード(修正前)

Bitmap pngBmp = new Bitmap(@"test.png");
Bitmap pictImageBmp = new Bitmap(this.pictureBox1.Image);

Mat pngMat = BitmapConverter.ToMat(pngBmp);
Mat pictImageMat = BitmapConverter.ToMat(pictImageBmp);

// 緑色の矩形を描画
Rect rect = new Rect(10, 20, 50, 300);
Cv2.Rectangle(pngMat, rect, new Scalar(0, 255, 0), 2);
Cv2.Rectangle(pictImageMat, rect, new Scalar(0, 255, 0), 2);

// 正しい色で矩形が表示される
this.pictureBox1.Image = BitmapConverter.ToBitmap(pictImageMat);
// 矩形が白くなる
this.pictureBox1.Image = BitmapConverter.ToBitmap(pictImageMat);

解決

OpenCvSharp3でMat変換すると、カラータイプが以下の通りになっていた。
PNG → BGR
PictureBoxのImage → BGRA

OpenCvSharp3ではBGRで描画処理をしているため、BGRAでビットマップ化すると色情報が落ちてしまう。
※どうしてそうなるのかは調べきれていません、すみません。

コード(修正後)

// Mat pictImageMat = BitmapConverter.ToMat(pictImageBmp);
// アルファチャンネル付きBGRからBGRに変換
Mat pictImageMat = BitmapConverter.ToMat(pictImageBmp).CvtColor(ColorConversionCodes.BGRA2BGR);

Viewing all articles
Browse latest Browse all 8901

Trending Articles