OpenCV适用于线程,但不适用于进程



大家好,感谢您的帮助。我有此功能来保存网络摄像头拍摄的帧中的视频。

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

cap在哪里定义?尝试在提供给多处理的函数中定义它。如果它在父级中定义并从父级传递到子项,则它正在被腌制,这可能会使其无法使用。

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

最新更新