python - OpenCV set() 和 read() 函数太慢(Python)
问题描述
我想循环一定范围内的帧,并将其附加到数组中。问题是,它太慢了。我已经检查了该功能需要多长时间,我认为这很慢。这是我当前的代码:
imgs = []
for j in range(range1, range2):
video.set(cv.CAP_PROP_POS_FRAMES, j)
ret, frame = video.read()
imgs.append(frame)
我也尝试用 替换imgs.append(frame)
,video.retrieve(video.grab())
但性能并没有太大差异。有没有更好的解决方案/替代方法来执行此代码的功能?
解决方案
哦,哇,nvm。设置使这变慢:
内线时间:15.308052062988281
外时间:0.4459998607635498
import cv2
import time
def setInside(cap, start, end):
imgs = [];
for a in range(start, end):
cap.set(cv2.CAP_PROP_POS_FRAMES, a);
_, frame = cap.read();
imgs.append(frame);
def setOutside(cap, start, end):
imgs = [];
cap.set(cv2.CAP_PROP_POS_FRAMES, start);
for a in range(start, end):
_, frame = cap.read();
imgs.append(frame);
# open vidcap
cap = cv2.VideoCapture("202534.avi");
# bounds
start = 0;
end = 2000;
# time it
start_time = time.time();
setInside(cap, start, end);
print("Inside Time: " + str(time.time() - start_time));
start_time = time.time();
setOutside(cap, start, end);
print("Outside Time: " + str(time.time() - start_time));
如果您将设置移动到循环之前,它会更快。
推荐阅读
- icecast - IceCast 的远程流服务器
- python - 使用 telnetlib - 'tn.write' 中的反斜杠加倍(但不在 'print' 中) - 如何在我的写入字符串中发送单个反斜杠
- asp.net-core - 将 ID 映射到控制器 API 的模型
- apache-camel - 在 OnException 块中访问骆驼交换对象
- javascript - 当我们要检查该类是否存在时,如何使用条件语句?
- c# - 在 Rows 中填充动态列数据。在 Datagrid、Winform 中添加
- ruby-on-rails - Intuit OpenID Connect,服务器返回的授权码不起作用
- c# - 当用户关闭在异步事件处理程序中执行异步任务的表单时会发生什么?
- c++ - 错误:OpenCV 3.4.0 CUDA ORB 特征检测
- python - 如何在 Python 中同时运行 n 个进程