我有以下代码行可将文本放置在图像上,但在大多数情况下它不清晰。如何使文本变白但文本周围带有黑色边框?
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)
Run Code Online (Sandbox Code Playgroud)
我在代码中执行此操作的方法是两次绘制相同的文本。一次是轮廓颜色的两倍厚(根据您的喜好进行调整),一次是文本颜色。
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)
Run Code Online (Sandbox Code Playgroud)
根据我的经验,按照评论中的建议进行扩张并不是最快的。如果在我经常编辑的图像中使用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)
Run Code Online (Sandbox Code Playgroud)
产量 (不完全确定截止值,但是在插入到已制成的图像中时通常不是问题。)
我不能完全确定您为什么会投票(我猜缺少“您尝试过的内容”),尤其是您自己添加了答案之后。我在寻找自己的解决方案时首先找到了这个,所以我认为它应该有一个不错的答案。
我决定将文本放在透明覆盖层的顶部,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)