2017-11-17 25 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() 

私はすべてを検索しましたが、解決策は見つかりませんでした。

また、私はcapが定義されているPythonの3.6

+1

あなたは本当に複数のプロセスを使用して同じファイルに書き込もうとしているのですか、間違って質問していますか? – PeterT

+0

あなたはそれを間違って読んでいます:)私はメインのものが他のことをしている間に録音を扱うメインのサブプロセスが必要です – Weizen

+0

マルチプロセスの代わりにサブプロセスを使うべきですか? – Weizen

答えて

1

を使用していますか?マルチプロセッシングに与えた関数でそれを定義してみてください。それが親で定義され、親から子に渡された場合、それはピクルスされているため、おそらくそれは使用できなくなります。

+0

関数内で定義しても機能しません。 – Weizen

1

私はこの問題を解決しました。 私はメインとインポートしたモジュールの一つでcap = cv2.VideoCapture(0)と呼んでいましたが、それは矛盾していました。私はそれを一度呼び出すことで解決しました。

関連する問題