我有以下代码行将文本放在图像上但在大多数情况下都不易读。如何将文本设为白色但文本周围有黑色边框?
cv2.putText(img=image_in, text=traffic_light_state, org=(center[0] + 50, center[1]),
fontFace=cv2.FONT_HERSHEY_COMPLEX , fontScale=1, color=[255, 255, 255], lineType=cv2.CV_AA, thickness=2)
答案 0 :(得分:1)
我在代码中执行此操作的方法是两次绘制相同的文本。一次是轮廓颜色的两倍厚(根据您的喜好进行调整),一次是文本颜色。
cv2.putText(img=image_in, text=traffic_light_state, org=(center[0] + 50, center[1]),
fontFace=cv2.FONT_HERSHEY_COMPLEX , fontScale=1, color=[0, 0, 0], lineType=cv2.CV_AA, thickness=4)
cv2.putText(img=image_in, text=traffic_light_state, org=(center[0] + 50, center[1]),
fontFace=cv2.FONT_HERSHEY_COMPLEX , fontScale=1, color=[255, 255, 255], lineType=cv2.CV_AA, thickness=2)
根据我的经验,按照评论中的建议进行扩张并不是最快的。如果在我经常编辑的图像中使用addWeighted,可能会很昂贵。在这两种情况下,肯定都有固定速度的技巧,但是这种方法更简单。
size = cv2.getTextSize("Test", cv2.FONT_HERSHEY_COMPLEX, 2, 4)[0]
im = np.ones((size[1], size[0]), np.uint8)*127
cv2.putText(im, "Test", (0,size[1]), cv2.FONT_HERSHEY_COMPLEX, 2, (0,), 4)
cv2.putText(im, "Test", (0,size[1]), cv2.FONT_HERSHEY_COMPLEX, 2, (255,), 2)
cv2.imwrite("test.png", im)
屈服(对于截止点并不完全确定,但是在插入已制成的图像时通常不是问题。)
我不确定您为什么会投票(我猜缺少“您尝试过的内容”),尤其是您自己添加了答案之后。我在寻找自己的解决方案时首先找到了这个,所以我认为它应该有一个不错的答案。
答案 1 :(得分:0)
我决定让文字位于透明叠加层的顶部,如下所示:
overlay_image = np.copy(image_in)
cv2.rectangle(img=overlay_image, pt1=(center[0] + 50, center[1] - 50), pt2=(center[0] + 350, center[1] + 50),
color=[0, 0, 0], thickness=-1)
cv2.putText(img=overlay_image, text=traffic_light_state, org=(center[0] + 50, center[1] + 10),
fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1, color=[255, 255, 255], thickness=1)
cv2.addWeighted(src1=overlay_image, alpha=0.5, src2=image_in, beta=0.5, gamma=0, dst=image_in)