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のときの例を参照ください↓
【Python/Pillow(PIL)】JPEG画像の品質を指定して保存する
JPEG画像の保存では、品質を指定することで、画像のファイルサイズが変わります。 品質を良くすると、画像はキレイになりますが、ファイルサイズが大きくなります。 逆に品質を下げると、画像にノイズが乗りますが、ファイルサイズが小さくなります。 ...
Pillowでは品質の初期値が75であったのに対して、OpenCVでは95になります。
OpenCVでは画像処理用として画像ファイルに保存されることが多いので、品質の値が大きめな初期値になっているのだと思いますが、品質95だと、jpeg画像特有のモスキートノイズのようなノイズは見た目上、ほぼ無いものの、輝度値レベルで見ると、1程度の計算誤差レベル?の誤差はあります。
画像処理用として画像ファイルに保存するには、基本的にはビットマップファイル(*.bmp)に保存することをおススメします。
参考ページ
OpenCV: Image file reading and writing
OpenCV: Flags used for image file reading and writing
コメント