2017-11-17 126 views
1

大家好,感谢您的帮助。 我有这个功能来保存我的摄像头拍摄的视频的视频。cv2适用于线程,但不适用于进程

import cv2 
import multiprocessing 
import threading 
def rec(): 
    # Define the codec and create VideoWriter object 
    fourcc = cv2.VideoWriter_fourcc(*'XVID') 
    out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

    while(cap.isOpened()): 
     ret, frame = cap.read() 
     if ret==True: 
      out.write(frame) 
     else: 
      break 

    # Release everything if job is finished 
    cap.release() 
    out.release() 
    cv2.destroyAllWindows() 

如果我用它来与线程,所以用这个代码,它工作得很好:

s1 = threading.Thread(target=rec) 
s1.start() 

但是如果我要开始另一个进程,使用下面的代码,当我打开视频它只包含有一些噪音的黑色框架。

s1 = multiprocessing.Process(target=rec) 
s1.start() 

我搜索了四周,但找不到任何解决方案。

另外,我使用Python 3.6

+1

你真的想用多个进程写入同一个文件,还是我看错了你的问题? – PeterT

+0

你读错了:)我想要一个主处理记录,而主处理其他事情的子处理 – Weizen

+0

我应该使用子进程而不是多处理? – Weizen

回答

1

cap定义在哪里?尝试在你给多处理的函数中定义它。如果它在父级中定义并从父级传递给子级,则会被腌制,并且可能会导致它无法使用。

+0

即使我在函数内部定义它也不工作。 – Weizen

1

我解决了这个问题。 我在我的主要和我的一个导入模块中调用cap = cv2.VideoCapture(0),并且发生冲突。我通过调用一次就解决了。

相关问题