2011-08-11 15 views
4

我調用下面的OpenCV方法(Emgu CV包裝器),它同時檢測的面孔,在多個線程:如何使OpenCV檢測方法線程安全?

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

我得到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