OpenCV的 - imread(),imwrite()增加PNG的大小?(OpenCV - im

2019-06-27 15:07发布

我想尝试对文件的一些简单的操作,我开始与打开和保存文件(我使用Python)

image = cv2.imread("image.png")
cv2.imwrite("image_processed.png", image)

此操作后,我原来的image从33KB转换成同一找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)

这是我与工作的形象:

Answer 1:

有些PNG作家如GIMP写比标准的libpng,用于通过OpenCV的更好的压缩PNG格式。 您也可以打开和处理的ImageMagick再次保存图像,并看到能起到什么作用(相对于OpenCV的)。

甚至有试图更好地重新压缩PNG图片,就像pngcrush专门的软件。

你能否提供有问题的形象? 我想用它玩,有关文件大小的优化。



Answer 2:

作为暗示由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



Answer 3:

半有关,但我有同样的问题matplotlib.image.imsave -这将8位灰度图像保存为16位,其激增的大小,即使使用后scipy.misc.bytescale ,以确保它是一个8位阵列。 然而, scipy.misc.imsave正确保存它作为一个8位图像。



Answer 4:

您可以使用第三方的命令行工具,使用OptiPNG重新压缩和收缩的PNG文件的大小没有失去任何东西。

参考:

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

https://github.com/johnpaulada/optipng



文章来源: OpenCV - imread(), imwrite() increases the size of png?