Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Use hog.detectMultiScale in multiple threads?

When I do pedestrian detection width Hog + SVM in OpenCV ,I try to using it in two thread to improve the detect speed.But I got OpenCV error: Assertion failed in unknown function,file ......\opencv\modules\core\src\matrix.cpp,line 116

My code:

DWORD WINAPI DetectFrame1(LPVOID lpPrarmeter){ HOGDescriptor hog1; hog1.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

while(true){
    WaitForSingleObject(g_hEvent1,INFINITE);        

    int temp;
    hog1.detectMultiScale(detImg1, found1, 0, cv::Size(8,8), cv::Size(0,0), 1.08, 2);  
    //cout<<"得到一帧near :"<<frame<<endl;
    //temp=frame;       // 标志当前处理帧 [9/26/2014 pan]

    if(!detImg1.empty()){
        imshow("det1",detImg1);
    }
    waitKey(10);
    cout<<"1——检测到行人:"<<found1.size()<<endl;
    SetEvent(g_hEvent1);
}
return 0;

} DWORD WINAPI DetectFrame2(LPVOID lpPrarmeter){ HOGDescriptor hog2; hog2.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); // 该函数不能并发 [9/26/2014 pan] while(true){
WaitForSingleObject(g_hEvent2,INFINITE);
int temp; //cout<<"得到一帧far :"<<frame&lt;<endl; temp="frame;" 标志当前处理帧="" [9="" 26="" 2014="" pan]="" hog2.detectmultiscale(detimg2,="" found2,="" 0,="" cv::size(8,8),="" cv::size(0,0),="" 1.08,="" 2);="" <="" p="">

    if(!detImg2.empty()){
        imshow("det2",detImg2);
    }
    waitKey(10);
    cout<<"2——检测到行人:"<<found2.size()<<endl;
    SetEvent(g_hEvent2);        // 变为有信号状态 [9/26/2014 pan]
}
return 0;

}

Can anyone help me ,thanks.

click to hide/show revision 2
strike through removed

Use hog.detectMultiScale in multiple threads?

When I do pedestrian detection width Hog + SVM in OpenCV ,I try to using it in two thread to improve the detect speed.But I got OpenCV error: Assertion failed failed<s >=0> in unknown function,file ......\opencv\modules\core\src\matrix.cpp,line ..\..\..\opencv\modules\core\src\matrix.cpp,line 116

My code:

DWORD WINAPI DetectFrame1(LPVOID lpPrarmeter){
    HOGDescriptor hog1;
    hog1.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

hog1.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

    while(true){
     WaitForSingleObject(g_hEvent1,INFINITE);        

     int temp;
     hog1.detectMultiScale(detImg1, found1, 0, cv::Size(8,8), cv::Size(0,0), 1.08, 2);  
     //cout<<"得到一帧near :"<<frame<<endl;
     //temp=frame;       // 标志当前处理帧 [9/26/2014 pan]

     if(!detImg1.empty()){
         imshow("det1",detImg1);
    }
    }
        waitKey(10);
     cout<<"1——检测到行人:"<<found1.size()<<endl;
     SetEvent(g_hEvent1);
}
    }
    return 0;

} DWORD WINAPI DetectFrame2(LPVOID lpPrarmeter){ HOGDescriptor hog2; hog2.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); // 该函数不能并发 [9/26/2014 pan] while(true){
WaitForSingleObject(g_hEvent2,INFINITE);
int temp; //cout<<"得到一帧far :"<<frame&lt;<endl; temp="frame;" 标志当前处理帧="" [9="" 26="" 2014="" pan]="" hog2.detectmultiscale(detimg2,="" found2,="" 0,="" cv::size(8,8),="" cv::size(0,0),="" 1.08,="" 2);="" <="" p="">

:"<<frame<<endl;
        //temp=frame;           // 标志当前处理帧 [9/26/2014 pan]
        hog2.detectMultiScale(detImg2, found2, 0, cv::Size(8,8), cv::Size(0,0), 1.08, 2);  

        if(!detImg2.empty()){
         imshow("det2",detImg2);
    }
    }
        waitKey(10);
     cout<<"2——检测到行人:"<<found2.size()<<endl;
     SetEvent(g_hEvent2);        // 变为有信号状态 [9/26/2014 pan]
}
    }
    return 0;
}

}

Can anyone help me ,thanks.