使用 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]
我想知道是否可以使用 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]