python - 在 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
有人能告诉我为什么吗?
解决方案
它们是两个不同的模块,它们可能使用不同版本的不同库,它们对要使用的最佳过滤器和压缩做出不同的决定。
为了查看图像是如何保存的,请尝试使用以下任何命令来检查这两个图像:
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
推荐阅读
- python - 根据其他两个数据框列中的值条件创建新列
- python - 在 Anaconda 中安装 Pdfminer 包时出错
- scala - 在涉及 Join 的 Spark-Scala 应用程序中,我们应该在什么时候将 Dataframe 转换为 Dataset?
- c# - 样式化圆形进度条 C# wpf
- python - PyTables - 使用 cols 方法消耗大量内存
- php - 成功以 html 形式发布数据后在屏幕底部显示消息
- rest - 使用 MS Graph 中的服务主体在 ARM 中创建 AKS 群集时出错
- laravel - Laravel Eloquent 模型:2 个字段,一个 fk 引用另一个表上的 2 个字段
- python - 如何在 AllenNLP 中训练语义角色标注模型?
- electron - 如何从电子中的 main.js 更改 index.html 中的值?