Windowsで画像を圧縮(ファイルサイズを小さく)したい場合に、標準アプリだと簡単にできません。画像をサクッと圧縮できれば便利です。
OpenCVでJpen画像のサイズは元のまま、Jpeg画像のファイルサイズを小さくします。OpenCVのcv2.imread()メソッドでJpeg画像を読み出し、cv2.imwrite()メソッドで画像を保存しますが、保存の際にcv2.IMWRITE_JPEG_QUALITYフラッグを用いて、jpeg品質を指定します。この際に品質を小さくすればファイルサイズも小さくなります。
使った関数・メソッド
- cv2.imread() : 画像ファイルの読み出し
- cv2.imwrite() : 画像の保存
- cv2.IMWRITE_JPEG_QUALITY : imwriteのフラッグ。保存時のJpeg品質を指定する。引数のquality(品質)は0-100の範囲で指定。95がデフォルト。
環境
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにファイル名'scotland.jpg'で保存しました。画像サイズ600x402px、ファイルサイズは107kBです。

コード
qualityに 80, 60, 40, 20を指定してそれぞれ別のファイルとして保存します。
import cv2 im = cv2.imread('scotland.jpg') for i in range(80, 0, -20): cv2.imwrite('scotland_'+str(i)+'.jpg', im, [int(cv2.IMWRITE_JPEG_QUALITY), i])
実行結果
quality =80

quality =60

quality =40

quality =20。かなり画像が粗くなりました。

ファイルサイズは以下の通り。qualityに応じてサイズが小さくなっています。
| quality | ファイルサイズ |
|---|---|
| 元 | 107KB |
| 80 | 59.8KB |
| 60 | 39.0KB |
| 40 | 30.5KB |
| 20 | 20.4KB |
以下のサイトを参考にさせていただきました
OpenCV >> ImwriteFlags
note.nkmk.me >> Python, OpenCVで画像ファイルの読み込み、保存(imread, imwrite)