OpenCV - imread(),imwrite()增加了png的大小?

Pat*_*ryk 11 python opencv image image-size

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

image = cv2.imread("image.png")
cv2.imwrite("image_processed.png", image)
Run Code Online (Sandbox Code Playgroud)

在此操作之后,我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)
Run Code Online (Sandbox Code Playgroud)

但这并没有太大变化(尺寸减少到132kB)

这是我正在使用的图像:

在此输入图像描述

ypn*_*nos 7

一些像GIMP这样的png编写者写的压缩PNG要比opencv使用的标准libpng好得多.您还可以使用Imagemagick再次打开并保存图像,并查看它与(与OpenCV相比)有何不同.

甚至还有专门的软件试图更好地重新压缩PNG,比如pngcrush.

你能提供有问题的图片吗?关于文件大小优化,我想玩它.


Jos*_*mez 5

正如ypnos所暗示的,您的源文件是jpg(即使它具有png扩展名)。这就是为什么当您将其保存为png格式时,它将随着更改格式(从jpg到png)而使用更多空间。

尝试将最后一行替换为:

cv2.imwrite("image_processed.jpg",image,params)
Run Code Online (Sandbox Code Playgroud)

您会发现大小变化不大。

或者,保持代码不变,但使用其他图像,例如http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png