我有26个PNG文件,每个文件都有一个字母的图像。它们都被完全裁剪为字母形状,结果当我将它们插入图像时,带有尾巴的字母都“在线上”
每个字母为黑色,具有透明背景。由于字母形状不同,每个PNG都有不同的尺寸
我认为我将通过根据源文件添加大小不同的透明边框来补救此问题,以使所有字母都具有相同的基准,例如,“ a”的底部将具有一些透明的空间。
我已经为每个字母进行了计算,但是有两个问题:
1)即使在应用操作之前,我似乎也无法读取文件并将其写入OpenCV中的新的未更改文件。图像中的透明度被替换为黑色。
2)虽然可以添加彩色边框,但似乎无法添加透明边框。
原始图片:
读后写:
表面带有蓝色边框,但透明度最高:
我有一种感觉,如果我能解决第一个问题,第二个问题可能会得到解决。这是我的代码:
img = cv2.imread(file)
img_with_border = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[-255,0,0,255])
#img_with_border = img
cv2.imwrite(newfile, img_with_border, [cv2.IMWRITE_JPEG_QUALITY, 100])
我希望对透明方面的工作有所帮助。 OpenCV是正确使用的工具吗?
谢谢
杰夫。
答案 0 :(得分:0)
要在OpenCV中加载具有4个通道的PNG图像,请使用im = cv2.imread(file, cv2.IMREAD_UNCHANGED)
。您将获得一个BGRA图像。
要更改Alpha值,必须更改图像的第四个通道。这意味着要创建透明边框,您必须传递值(B, G, R, 0)
而不是[-255, 0, 0, 255]
。 (那是-255是什么?)。 B,G和R可以为0,没关系。
此外,请确保写入PNG图像以保持透明度。您似乎正在将结果写为JPEG。