OpenCV - imread(), imwrite() increases the size of png?

后端 未结 4 1595
孤街浪徒
孤街浪徒 2020-12-29 08:12

I wanted to try out some simple operations on files and I started with opening and saving files (I use Python)

image = cv2.imread(\"image.png\")
cv2.imwrite(         


        
相关标签:
4条回答
  • 2020-12-29 08:46

    Some png writers like GIMP write much better compressed PNGs than standard libpng, which is used by opencv. You can also open and save the image again with Imagemagick, and see what difference that makes (as compared to OpenCV).

    There is even specialized software that tries to better re-compress PNGs, like pngcrush.

    Can you provide the image in question? I would like to play with it, regarding file size optimization.

    0 讨论(0)
  • 2020-12-29 08:47

    Semi-related, but I had the same issue with matplotlib.image.imsave - it would save an 8-bit grayscale image as 16-bit, which ballooned the size, even after using scipy.misc.bytescale to make sure it was an 8-bit array. However, scipy.misc.imsave saved it correctly as an 8-bit image.

    0 讨论(0)
  • 2020-12-29 08:55

    As hinted by ypnos, your source file is jpg (even if it has the png extension). That is why, when you save it in png format, it will use more space, as you are changing the format (jpg to png).

    Try replacing the last line with:

    cv2.imwrite("image_processed.jpg",image,params)
    

    And you will see that the size doesn't change that much.

    Alternatively, keep the code as it is, but use a different image, such as http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png

    0 讨论(0)
  • 2020-12-29 09:07

    You can use a third-party command line tool optipng to re-compress and shrink the png file size without losing anything.

    Reference:

    http://optipng.sourceforge.net/pngtech/optipng.html

    https://github.com/johnpaulada/optipng

    0 讨论(0)
提交回复
热议问题