python - 在视频的特定时间提取帧并插入文本 OpenCV Python
问题描述
所以我有一个持续时间为 15 秒的视频,在特定时间我需要插入一个文本字段。到目前为止,我的代码只是读取视频并显示它。之后,我们提取帧并计算每帧的持续时间。
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('my_baby_dog.mp4')
# 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:
fps = cap.get(cv2.CAP_PROP_FPS) # OpenCV2 version 2 used "CV_CAP_PROP_FPS"
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = frame_count / fps
print('fps = ' + str(fps))
print('number of frames = ' + str(frame_count))
print('duration (S) = ' + str(duration))
minutes = int(duration / 60)
seconds = duration % 60
print('duration (M:S) = ' + str(minutes) + ':' + str(seconds))
# Display the resulting frame
frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
cv2.putText(img=frame, text='EKO', org=(int(frameWidth / 2 - 20), int(frameHeight / 2)),
fontFace=cv2.FONT_HERSHEY_DUPLEX, fontScale=3,
color=(0, 255, 0))
cv2.imshow('Frame', frame)
# Press Q on keyboard to exit
if cv2.waitKey(25) & 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()
解决方案
听起来您想在 6 秒后添加文本覆盖。假设此覆盖将一直持续到视频完成,您将需要添加一个if
语句来比较duration
您start time
的文本覆盖。然后显示它。
import cv2
import numpy as np
start_time = 6
# 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('my_baby_dog.mp4')
........
while (cap.isOpened()):
........
# ADD OVERLAY TEXT
if start_time < duration:
cv2.putText(img=frame, text='EKO', org=(int(frameWidth / 2 - 20), int(frameHeight / 2)),
fontFace=cv2.FONT_HERSHEY_DUPLEX, fontScale=3,
color=(0, 255, 0))
cv2.imshow('Frame', frame)
同样,您可以像这样开始和停止文本覆盖
import cv2
import numpy as np
start_time = 6
stop_time = 10
........
# ADD OVERLAY TEXT
if start_time < duration < stop_time:
cv2.putText(img=frame, text='EKO', org=(int(frameWidth / 2 - 20), int(frameHeight / 2)),
fontFace=cv2.FONT_HERSHEY_DUPLEX, fontScale=3,
color=(0, 255, 0))
.......
推荐阅读
- ember.js - Ember 添加自定义事件
- python-3.x - Robot- Selenium:我们如何处理 ID 动态变化的元素(文本框)
- c# - 如何保持安装在各种 PC 中的 Winforms 应用程序始终连接到 SQL Server Express 中的数据库
- ios - 深层链接 URL 方案不调用任何函数(swift)
- sql - 在特定条件下在表之间移动数据
- c# - 如何在选择 LINQ 查询中定义局部变量
- css - 如何更改 wordpress 网站上菜单的移动断点?
- c# - 减少某些检查器的代码大小
- php - 我的 URL 的最后一个参数正在拆分(我正在使用 zxing qr 扫描、php 以及前缀和后缀变量)
- flutter - 将 .sqlite db 复制到电话上的文档目录