用opencv提供的python接口从视频里面提取帧有点问题

公子LV 2017-11-21 03:24:37
我用同学给的脚本从视频里面提取帧的时候发现,这个脚本之提取整个视频前几秒的帧。比方说一个视频有10秒,这个脚本只提取第一秒里的帧,后面的就不管了。不知问题出在哪儿。请指教,谢谢!代码如下:


#coding=utf-8

import os
import cv2


global lines
#从txt文本里读取视频路径和fps
#fps表示每fps帧提取一帧
with open("config.txt") as f:
lines=f.readlines()

videopath=lines[0]
videopath=videopath.strip()
videopath=videopath[10:]
fps=lines[1]
fps=fps.strip()
fps=int(fps[4:])


mycount=0


for path,directory,filelist in os.walk(videopath):
for myfile in filelist:
if myfile.endswith("MOV"):
vpath=path+'\\'+myfile
cap=cv2.VideoCapture(vpath)
index=len(videopath)
newPath=path[0:index]+'\\Picture'+path[index:]+"\\"
if(os.path.exists(newPath))==False:
os.makedirs(newPath)
totalframe = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
for i in range(totalframe):
if i % fps == 0:
ret, frame = cap.read()
mycount = "%.6d" % mycount;
print (newPath + str(mycount) + '.jpg')
cv2.imwrite(newPath + str(mycount) + '.jpg', frame)
mycount = int(mycount)
mycount += 1

...全文
306 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gods_Dusk 2017-11-23
  • 打赏
  • 举报
回复
引用 2 楼 flyfreelv 的回复:
[quote=引用 1 楼 yeahDeDiQiZhang 的回复:] cap.read()只在i % fps == 0时执行
代码里面cap.read()是只在i%fps==0时执行的,是这里的问题吗?能具体吗?谢谢![/quote] 如果你的fps大于视频总帧数,那么读取仅在i=0时进行一次
公子LV 2017-11-22
  • 打赏
  • 举报
回复
引用 1 楼 yeahDeDiQiZhang 的回复:
cap.read()只在i % fps == 0时执行
代码里面cap.read()是只在i%fps==0时执行的,是这里的问题吗?能具体吗?谢谢!
Gods_Dusk 2017-11-21
  • 打赏
  • 举报
回复
cap.read()只在i % fps == 0时执行

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧