Сохранение изображения между PIL и CV2

#python #python-imaging-library #opencv-python

Вопрос:

Теперь я хочу создать изображение и поместить на него текст.

Но теперь у меня есть вопрос

Вот код, который я использую

 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 WorldnHello WorldnHello WorldnHello WorldnHello WorldnHello 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 совершенно разные

Размер файла составляет 2,27 КБ

Размер CV2 составляет 5,30 КБ

Может ли кто-нибудь объяснить мне, почему?

Картинка

Ответ №1:

Это два разных модуля, которые потенциально используют разные версии разных библиотек, которые принимают разные решения о наилучших фильтрах и сжатии для использования.

Чтобы увидеть, как сохраняются изображения, попробуйте использовать любую из следующих команд для проверки двух изображений:

 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
 

Комментарии:

1. Ух ты, спасибо тебе. Этот вопрос так сильно смутил меня. Я думаю, что понимаю прямо сейчас