Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Opencv How to Overlay Text on Video

I want to add some text to be displayed over the video of my webcam but I can't seem to get it. I've added text to an image before with Opencv but the method seems different for videos so How would I go about doing that. This is my webcam script:

import cv2
import numpy as np

# Create a VideoCapture object and read from input file
# If the input is the camera, pass 0 instead of the video file name
cap = cv2.VideoCapture(0)

# Check if camera opened successfully
if (cap.isOpened()== False): 
  print("Error opening video stream or file")

# Read until video is completed
while(cap.isOpened()):
  # Capture frame-by-frame
  ret, frame = cap.read()
  if ret == True:

    # Display the resulting frame
    cv2.imshow('Frame',frame)

    # Press Q on keyboard to  exit
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break

  # Break the loop
  else: 
    break

# When everything done, release the video capture object
cap.release()

# Closes all the frames
cv2.destroyAllWindows()
like image 711
MasterJ Avatar asked Feb 09 '19 14:02

MasterJ


1 Answers

Have a look at the OpenCV's docs about putText. Here's a quick hack I did to display some bounding box labels:

def __draw_label(img, text, pos, bg_color):
   font_face = cv2.FONT_HERSHEY_SIMPLEX
   scale = 0.4
   color = (0, 0, 0)
   thickness = cv2.FILLED
   margin = 2
   txt_size = cv2.getTextSize(text, font_face, scale, thickness)

   end_x = pos[0] + txt_size[0][0] + margin
   end_y = pos[1] - txt_size[0][1] - margin

   cv2.rectangle(img, pos, (end_x, end_y), bg_color, thickness)
   cv2.putText(img, text, pos, font_face, scale, color, 1, cv2.LINE_AA)

In your code something like this should do:

if ret == True:

   # draw the label into the frame
   __draw_label(frame, 'Hello World', (20,20), (255,0,0))

   # Display the resulting frame
   cv2.imshow('Frame',frame)

Did you somehow do the drawing after you called imshow? I don't see any reason why videos should behave differently.

like image 162
TeddybearCrisis Avatar answered Sep 22 '22 06:09

TeddybearCrisis