Вы можете использовать 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]