如何添加透明边框OpenCV copymakeborder

时间:2018-07-16 12:50:15

标签: opencv

我有26个PNG文件,每个文件都有一个字母的图像。它们都被完全裁剪为字母形状,结果当我将它们插入图像时,带有尾巴的字母都“在线上”

每个字母为黑色,具有透明背景。由于字母形状不同,每个PNG都有不同的尺寸

我认为我将通过根据源文件添加大小不同的透明边框来补救此问题,以使所有字母都具有相同的基准,例如,“ a”的底部将具有一些透明的空间。

我已经为每个字母进行了计算,但是有两个问题:

1)即使在应用操作之前,我似乎也无法读取文件并将其写入OpenCV中的新的未更改文件。图像中的透明度被替换为黑色。

2)虽然可以添加彩色边框,但似乎无法添加透明边框。

原始图片:

Original Image

读后写:

Read in, and written out

表面带有蓝色边框,但透明度最高:

Apparenly with a blue border, but maximum transparancy

我有一种感觉,如果我能解决第一个问题,第二个问题可能会得到解决。这是我的代码:

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是正确使用的工具吗?

谢谢

杰夫。

1 个答案:

答案 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。