Jpeg画像のファイルサイズを小さくする
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)