Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

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がデフォルト。
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにファイル名'scotland.jpg'で保存しました。画像サイズ600x402px、ファイルサイズは107kBです。
f:id:T_A_T:20210425111025j:plain

コード

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
f:id:T_A_T:20210425112819j:plain

quality =60
f:id:T_A_T:20210425112834j:plain

quality =40
f:id:T_A_T:20210425112850j:plain

quality =20。かなり画像が粗くなりました。
f:id:T_A_T:20210425112906j:plain

ファイルサイズは以下の通り。qualityに応じてサイズが小さくなっています。

quality ファイルサイズ
107KB
80 59.8KB
60 39.0KB
40 30.5KB
20 20.4KB
以下のサイトを参考にさせていただきました

OpenCV >> ImwriteFlags
note.nkmk.me >> Python, OpenCVで画像ファイルの読み込み、保存(imread, imwrite)

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村