Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从openCV+;python_Python_Opencv_Frame Rate - Fatal编程技术网

如何从openCV+;python

如何从openCV+;python,python,opencv,frame-rate,Python,Opencv,Frame Rate,我目前使用opencv录制视频的模式如下 import cv capture=cv.CaptureFromCAM(self.deviceID) img_size=cv.GetSize(cv.QueryFrame(capture)) #create a writer object for the video writer=cv.CreateVideoWriter( filename='temp.avi', fourcc=cv.CV_FOURCC('M',

我目前使用opencv录制视频的模式如下

import cv    

capture=cv.CaptureFromCAM(self.deviceID)
img_size=cv.GetSize(cv.QueryFrame(capture))

#create a writer object for the video
writer=cv.CreateVideoWriter(
        filename='temp.avi',
        fourcc=cv.CV_FOURCC('M','J','P','G'),
        fps=15,
        frame_size=img_size,
        is_color=1)

while True:
    #grab the frame
    img=cv.QueryFrame(capture)

    #write frame to video
    cv.WriteFrame(writer,img)


    #if 'Enter' or 'Esc' key is pressed, end video capture
    c = cv.WaitKey(7) % 0x100
    if c == 27 or c == 10:
        break
问题是我必须提前手动设置每秒的帧数。我将图像存储在一个列表中,并跟踪经过的时间,但这只是导出一个没有帧的文件:

import cv
import time

capture=cv.CaptureFromCAM(self.deviceID)
img_size=cv.GetSize(cv.QueryFrame(capture))

imgList=[]

zero=time.time()
while True:
    #grab the frame
    img=cv.QueryFrame(capture)

    imgList.append(img)

    cv.ShowImage("Window1",img)

    #if 'Enter' or 'Esc' key is pressed, end video capture
    c = cv.WaitKey(7) % 0x100
    if c == 27 or c == 10:
        break
duration=time.time()-zero


framesPerSecond=len(imgList)/duration)
writer=cv.CreateVideoWriter(
        filename='temp.avi',
        fourcc=cv.CV_FOURCC('M','J','P','G'),
        fps=framesPerSecond,
        frame_size=img_size,
        is_color=1)

for i in imgList:
    cv.writeFrame(writer,i)

一个小笨蛋。任何关于我现有代码的替代方法或调整的建议都会非常有用。

您可能正在创建单帧的视频,而不是没有帧的视频。尝试将
img=cv.QueryFrame(捕获)
更改为
img=cv.QueryFrame(捕获);dest=cv.CreateImage(img_大小、img.depth、img.nChannels);简历副本(img,dst)
然后
imgList.append(dest)
。现在,为什么要使用这个旧API?我发现对于python绑定,cv的文档比cv2多得多。我开始有点向前推。。。我计划在cv2中重建它,一旦它运行起来。因此,评论中关于制作每个帧的副本的部分并没有改变最终视频中的任何内容?只是完成了它的实现。制作副本并附加它反而起了作用。不太清楚为什么,但它起了作用。很多人为此感谢你。关于这些函数的文档不是特别好,它导致人们相信可以多次调用
GrabFrame
,并在以后调用
RetrieveFrame
相同的次数,从而消除了对这些副本的需要,也增加了计算的fps。