使用 opencv 在图像上写表情符号

Writing an emoji on an image using opencv

我想知道是否可以使用 OpenCV 在图像上写表情符号。

这是我目前所掌握的。

import cv2
import emoji

img = cv2.imread('image.png')
tick=str(emoji.emojize(':heavy_check_mark:'))
cv2.putText(img, tick,(5,5), cv2.FONT_HERSHEY_TRIPLEX , 1, (255, 255, 255),3)
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码不起作用,我不知道为什么。是否可以将刻度表情符号加载为图像(比如 img2),然后 'paste' 它在某个坐标上?

我在 windows 上使用 python 3.7.6。

请检查这个关于在 OpenCV 中加载 TTF 字体的答案Load TrueType Font to OpenCV

您可以使用 PIL/Pillow 和合适的字体,如下所示:

#!/usr/local/bin/python3

from PIL import Image, ImageFont, ImageDraw
import numpy as np
import cv2
import emoji

# Open image with OpenCV
im_o = cv2.imread('start.png')

# Make into PIL Image
im_p = Image.fromarray(im_o)

# Get a drawing context
draw = ImageDraw.Draw(im_p)
font = ImageFont.truetype("Arial Unicode.ttf",32)
tick=str(emoji.emojize(':heavy_check_mark:'))
draw.text((40, 80),tick,(255,255,255),font=font)

# Convert back to OpenCV image and save
result_o = np.array(im_p)
cv2.imwrite('result.png', result_o)

请注意,红色和蓝色通道在 OpenCV 中是互换的,因此要么反转通道顺序,要么使用黑色、白色和绿色。像这样的反向通道:

BGRimage = RGBimage[...,::-1]