ファイルに対していくつかの簡単な操作を試してみたかったので、ファイルを開いて保存することから始めました(Pythonを使用しています)
image = cv2.imread("image.png")
cv2.imwrite("image_processed.png", image)
この操作の後、33kBの元のimage
は同じ外観の144kB画像に変換されます。
私はこのようなことをしようとしました: http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite
params = list()
params.append(cv.CV_IMWRITE_PNG_COMPRESSION)
params.append(8)
image = cv2.imread("image.png")
cv2.imwrite("image_processed.png",image,params)
しかし、これはあまり変わりません(サイズは132kBに減少しました)
これは私が使用している画像です:
GIMPのような一部のpngライターは、opencvで使用される標準のlibpngよりもはるかに優れた圧縮PNGを記述します。 Imagemagickを使用して画像を再度開いて保存し、(OpenCVと比較して)どのような違いがあるかを確認することもできます。
Pngcrushのように、PNGをより適切に再圧縮しようとする特殊なソフトウェアもあります。
問題の画像を提供できますか?ファイルサイズの最適化に関して、それで遊んでみたいと思います。
Ypnosで示唆されているように、ソースファイルはjpgです(拡張子がpngの場合でも)。そのため、png形式で保存すると、形式(jpgからpng)を変更するため、より多くのスペースが使用されます。
最後の行を次のように置き換えてみてください。
cv2.imwrite("image_processed.jpg",image,params)
そして、サイズはそれほど変わらないことがわかります。
または、コードをそのままにして、 http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png などの別の画像を使用します。
半関連ですが、matplotlib.image.imsave
で同じ問題が発生しました。scipy.misc.bytescale
を使用してサイズが膨らんだ後でも、8ビットのグレースケール画像が16ビットとして保存されます。 8ビット配列。ただし、scipy.misc.imsave
は8ビット画像として正しく保存しました。
サードパーティのコマンドラインツールoptipngを使用して、何も失うことなくpngファイルサイズを再圧縮および縮小できます。
参照: