旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【C#】 JPEGの品質を変更する

OpenCVSharpのImWriteを使うことで画像を保存できますが、品質レベル(デフォルト値95)を変えたい時どうすれば良いのか調べました。
下記のようにエンコード⇒デコード⇒ImWriteという手順で良いようです。

// 画像の読み込み
Mat image = Cv2.ImRead("lenna.png");
// 品質50でエンコードする
var buffer = new byte[image.Rows * image.Cols * image.Channels()];
var param = new ImageEncodingParam(ImwriteFlags.JpegQuality, 50);
Cv2.ImEncode(".jpg", image, out buffer, param);
// デコードして保存する
image = Cv2.ImDecode(buffer, ImreadModes.Color);
Cv2.ImWrite("compressed_lenna.jpg", image);