cv2适用于线程但不适用于进程

时间:2017-11-17 21:55:39

标签: python multithreading multiprocessing 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

2 个答案:

答案 0 :(得分:1)

cap定义在哪里?尝试在为多处理提供的函数中定义它。如果它在父节点中定义并从父节点传递给子节点,则它正在被pickle,这可能使它无法使用。

答案 1 :(得分:1)

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