2017-11-17 186 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),並且發生衝突。我通過調用一次就解決了。

相關問題