我们可以在 OpenCV 中为文本添加边框并使文本的内部部分透明吗

Can we add border to a text in OpenCV and make the inside part of the text transparent

我们可以使用OpenCV制作水印吗

这是使用 HTML 代码制作的,但问题是我想使用 OpenCV 或 pillow 或任何其他真正有用的软件包制作同样的东西

我研究了一下,走到这一步

    def generate_watermark_image(self, banner_details):
        banner_image = requests.get(banner_details.get('banner_url'))
        open('image.jpg', 'wb').write(banner_image.content)
        background_image = Image.open('image.jpg').convert("RGBA")
        actual_width, actual_height = background_image.size
        watermark_text = Image.new('RGBA', background_image.size, (255,255,255,0))
        font_size = '50'
        if actual_width>1000 and actual_height>1000:
            font_size = '100'
        title_font = ImageFont.truetype("arial", int(font_size))
        font_width, font_height = title_font.getsize('PLOTCH')
        padding_left = int((banner_details.get('width')/2)-(font_width/2))
        padding_top = int((banner_details.get('height')/2)-(font_height*2))
        d = ImageDraw.Draw(watermark_text)    
        d.text((padding_left, padding_top), "PLOTCH", fill=(255, 255, 255, 150), font=title_font)
        combined = Image.alpha_composite(background_image, watermark_text)
        background_image = cv2.cvtColor(np.array(combined), cv2.COLOR_RGB2BGR) 
        cv2.imwrite("font/minion.png", background_image)
        return background_image

使用我的功能我只能做到这一点 我们能不能像我们使用的那样使内部部分透明 -webkit-text-fill-color: transparent; 在 html

这是在 Python/OpenCV 中创建大纲文本的一种方法。

基本上,在黑色图像上绘制白色文本,然后在白色图像上绘制较小的黑色文本。然后将其用作蒙版,在彩色图像和原始图像之间进行混合。

输入:

import cv2
import numpy as np

# read input image
img = cv2.imread('lena.jpg')
ht, wd = img.shape[:2]

# create black image 
mask = np.zeros_like(img)

# put white text on black image at desired coordinates
#cv2.putText(label_img, str(index), (x,y), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0,0,255), 2)
mask = cv2.putText(mask, "PLOTCH", (50, 128), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255,255,255), 5)

# put smaller black text over white text
mask = cv2.putText(mask, "PLOTCH", (50, 128), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0,0,0), 2)

# create text color image (white, for example)
color_img = np.full_like(img, (255,255,255))

# blend input with color image using mask
result = np.where(mask==(255, 255, 255), color_img, img)

# save result
cv2.imwrite("lena_outline_mask.jpg", mask)
cv2.imwrite("lena_outline_text.jpg", result)

# show images
cv2.imshow("mask", mask)
cv2.imshow("result", result)
cv2.waitKey(0)

蒙版图片:

结果: