

### 前提・問題点

バージョン：  
Python3.7.3  
OpenCV4.1.0

imread関数でjpgファイルを読み込み、読み込んだ画像に何も処理を加えずimwrite関数でjpgファイルを書き出すと、書き出し後のjpgのファイルサイズが読み込み元のjpgのファイルサイズより大きくなってしまいます。

具体的には以下の通りです。  
読み込み元jpg：1,209KB  
書き出し後jpg：1,608KB

異なるいくつかのjpgで試したのですが、どれも同様の比率でファイルサイズが大きくなってしまいます。

また、読み込み元画像と書き出し後画像の画素数、画像サイズ、チャンネル数を比較しても全く違いはありませんでした。

背景として、OpenCVを用いて加工対象画像にテキストを乗せて書き出しを行っていたのですが、ファイルサイズが異常に大きくなってしまっていたため、試しにimreadの読み込み後、加工処理を行わずimwriteを実行した次第です。  

### ソースコード

[code]

    import cv2
    
    im = cv2.imread('target.jpg')
    cv2.imwrite('after.jpg', im)
    
[/code]

### 試したこと

下記を参考に、IMWRITE_JPEG_QUALITYなどjpg書き出し時の設定値をすべて試して書き出したのですが、やはりファイルサイズが大きくなってしまいます。

<https://docs.opencv.org/3.4.3/d4/da8/group__imgcodecs.html>

また、読み込み元jpgと書き出し後jpgをWinMergeやImageMagickを用いて比較したところ、確かに大きな差分が確認できるのですが、その原因が何なのか不明な状態です。

上記原因と、ファイルサイズをあまり変えずに書き出す方法をご教授いただけると助かります。  
よろしくお願いいたします。


CC BY-SA 4.0
2019-06-25T06:22:36.220
56082
2019-06-25T16:46:48.957
2019-06-25T06:53:25.837
3060
31403
question
python python3 opencv
OpenCVでjpgファイルの読み込み後、書き出しを行うとファイルサイズが大きくなってしまう


JPEGのクオリティの設定が元の画像より高いのでサイズが大きくなっていると思います。

[code]

    import cv2
    im = cv2.imread('image1.jpg')
    cv2.imwrite('after10.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,10])
    cv2.imwrite('after20.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,20])
    cv2.imwrite('after30.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,30])
    cv2.imwrite('after40.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,40])
    cv2.imwrite('after70.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,70])
    cv2.imwrite('after80.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,80])
    cv2.imwrite('after90.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,90])
    cv2.imwrite('after95.jpg', im,[cv2.IMWRITE_JPEG_QUALITY,95])
    
    cv2.__version__
    '3.4.1'
    
[/code]

うちの環境では、上記のコードでクオリティの指定ができました。  
windows10の環境です。元の画像によりますけど、テストした画像では60%以下にすると元の画像より小さくなるのを確認しました。


CC BY-SA 4.0
2019-06-25T16:46:48.957
56094
2019-06-25T16:46:48.957
34277
56082
answer