首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不损失质量的情况下为图像添加黑色边框

在不损失质量的情况下为图像添加黑色边框
EN

Stack Overflow用户
提问于 2018-10-10 04:08:07
回答 2查看 1.1K关注 0票数 0

我有一个1920x816分辨率的21:9图像,我想在顶部和底部添加黑条,以便与1920x1080分辨率的图像进行比较。为此,我尝试了两种解决方案,一种是使用OpenCV,另一种是使用枕头图像。然而,这两种方法都降低了图像的质量。

未编辑的图像是使用VapourSynth和FFMS2从视频文件中获取的。

文件之间的比较:(1920x816 frame.png和1920x1080 frame.png不是编辑文件)

https://diff.pics/rKVbxTRRPG35

我是不是错过了一些防止质量损失的重要选项?或者我应该使用不同的库呢?

我在OpenCV中使用的代码:

代码语言:javascript
复制
import cv2

img = cv2.imread('1920x816 frame.png')
color = [0, 0, 0]
top, bottom, left, right = [132, 132, 0, 0]
img_with_border = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)

cv2.imwrite("1920x1080 after OpenCV.png", img_with_border)

而对于Pillow:

代码语言:javascript
复制
from PIL import Image, ImageOps

old_im = Image.open("1920x816 frame.png")
new_im = ImageOps.expand(old_im, border=(0, 132))

new_im.save("1920x1080 after Pillow.png", "PNG")
EN

回答 2

Stack Overflow用户

发布于 2018-10-10 05:23:44

我的质量看起来没什么不同。但图像文件之间的Gamma值存在差异。原始图像是使用gamma 0.45455保存的,而处理后的图像保存时没有gamma值。

下面解释一下gamma在png文件中的含义:https://hsivonen.fi/png-gamma/

最好只从两幅图像中剥离伽马值。Pillow没有提供任何处理伽马元数据的简单方法,我也不确定openCV是否提供了这样的方法。

票数 1
EN

Stack Overflow用户

发布于 2018-10-10 04:39:03

经过一番寻找,我意识到我是个笨蛋。如果我使用Vapoursynth来获取frame,那么我也可以使用它来添加所需的边框。

video = core.std.AddBorders(clip = video, top = 132, bottom = 132, color = [0,0,0])

这可以在不进行任何额外压缩的情况下完成工作。也许有人会利用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52728575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档