2011-08-11 30 views
4

Iは、同時に複数のスレッドで、顔を検出し、次のOpenCVの方法(EmguのCVラッパー)を呼び出す:OpenCV Detectメソッドをスレッドセーフにするには?

IntPtr objects = CvInvoke.cvHaarDetectObjects(
        img.Ptr, 
        haarObj.Ptr, 
        stor.Ptr, 
        scaleFactor, 
        minNeighbors, 
        flag, 
        minSize); 

IはAccessViolationExceptionを得ます。この方法ではスレッドの寿命がほぼすべてかかるため、.NETの標準的なロックは受け入れられません。どのようにこのメソッドを同時に動作させるためのアイディアですか?

答えて

3

解決策は、OpenCVで内部マルチスレッドを使用することです。そのためにはOpenCVをIntel TBBで構築する必要があります。 Detectメソッドが呼び出されると、内部的に複数のスレッドが使用されます。

+0

おそらくあなたが知っていることは、OpenCV上で同時に何が実行できるのか、何がないのかを示すドキュメントがありますか?私はEmgu.CV.CameraCalibration.FindChessboardCornersのいくつかのインスタンスを別のスレッドで実行する必要があります(heh、あなたもキエフにいる:)) – sergtk

+1

@sergdevそれはそのようなドキュメントがないようです。メソッドが並行性をサポートしているかどうかを確認する最良の方法は、複数のスレッドで実行するか、OpenCVソースを表示することです。 TBBをサポートするだけでOpenCVを構築することもできます。 – Centro

+1

私は今このようにしていますが、docには何も書かれていないので、通知なしに将来変更される可能性があります – sergtk

関連する問題