首页 > 解决方案 > 在 PIL 和 CV2 之间保存图像

问题描述

我现在想创建一个图像,并在其上放置一些文本。

但现在我有一个问题

这是我使用的代码

from PIL import Image , ImageDraw , ImageFont
import cv2
import numpy as np
    
#Create a Image
p_image = Image.new('L' , (960 , 720) , 50)
    
# Put text on it
text = 'Hello World\nHello World\nHello World\nHello World\nHello World\nHello World'
draw  = ImageDraw.Draw(p_image)
draw.multiline_text(
    (0 , 0) , 
    text , 
    font = ImageFont.truetype('font.ttf' , size = 16) , 
    fill = 255)
    
# Save it by PIL
p_image.save('1.png')
    
#Convert to CV2 then save it
c_image = np.array(p_image)
cv2.imwrite('2.png' , c_image)

两种方法都得到相同的图像

但是 PIL 和 cv2 的大小有很大的不同

PIL 1 为 2.27KB

CV2 是 5.30KB

有人能告诉我为什么吗?

图片

标签: pythonpython-imaging-libraryopencv-python

解决方案


它们是两个不同的模块,它们可能使用不同版本的不同库,它们对要使用的最佳过滤器和压缩做出不同的决定。

为了查看图像是如何保存的,请尝试使用以下任何命令来检查这两个图像:

pngcheck -v image.png
exiftool image.png
magick identify -verbose image.png

我发现像这样比较最容易:

magick identify -verbose a.png > a
magick identify -verbose b.png > b
opendiff a b

推荐阅读