OpenCVで画像をファイルに保存するには imwrite 関数を用いますが、この関数でjpegファイルの品質を指定して保存することが可能です。
imwrite関数の書式は
imwrite(filename, img[, params]) ->retval
引数 | 説明 |
filename | ファイル名 |
img | 画像データ |
params | オプション設定(省略可) |
となりますが、paramsの部分に jpegファイルの品質の値(0~100)を指定することが可能です。
品質を指定して保存するサンプルは以下の通りです。
import cv2
# 画像を開く
img = cv2.imread("Mandrill.bmp", cv2.IMREAD_UNCHANGED)
# JPEGで品質(75)を指定して画像を保存する
cv2.imwrite("Mandrill_q75.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 75])
品質の値による画像の違いは、Pillowのときの例を参照ください↓
Pillowでは品質の初期値が75であったのに対して、OpenCVでは95になります。
OpenCVでは画像処理用として画像ファイルに保存されることが多いので、品質の値が大きめな初期値になっているのだと思いますが、品質95だと、jpeg画像特有のモスキートノイズのようなノイズは見た目上、ほぼ無いものの、輝度値レベルで見ると、1程度の計算誤差レベル?の誤差はあります。
画像処理用として画像ファイルに保存するには、基本的にはビットマップファイル(*.bmp)に保存することをおススメします。
参考ページ
https://docs.opencv.org/4.6.0/d4/da8/group__imgcodecs.html#gabbc7ef1aa2edfaa87772f1202d67e0ce
https://docs.opencv.org/4.6.0/d8/d6a/group__imgcodecs__flags.html#ga292d81be8d76901bff7988d18d2b42ac