我想添加一些文本以显示在我的网络摄像头的视频上,但我似乎无法理解。我之前使用 Opencv 向图像添加了文本,但视频的方法似乎不同,所以我将如何去做。这是我的网络摄像头脚本:

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()

最佳答案

看看 OpenCV's docs about putText 。这是我用来显示一些边界框标签的快速技巧:

@staticmethod
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)

在您的代码中,应该执行以下操作:
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)

你调用 imshow 后有没有以某种方式画图?我看不出有任何理由为什么视频的行为应该有所不同。

关于Opencv如何在视频上叠加文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54607447/

10-12 00:30
查看更多