2011-08-19 30 views
1

我使用openni和opencv運行kinect。我已經做了人臉檢測與攝像頭haarcascade但我不能夠與Kinect的做如何用kinect和opencv做臉部檢測?

int main(int argc, char* argv[]){ 
    try 
    { 
     ... // call OpenCV 
    VideoCapture capture(CV_CAP_OPENNI); 
    CvHaarClassifierCascade* cascade=0; 
    CvMemStorage* storage=0; 
    CvSeq* face; 
    storage=cvCreateMemStorage(0); 
    cascade=(CvHaarClassifierCascade *)cvLoad("haarcascade_profileface.xml",0,0,0);*/ 
    if(cascade){ 
    for(;;) 
    { 
     Mat depthMap; 


     if(!capture.grab()) 
     { 
      cout << "Can not grab images." << endl; 
      return -1; 
     } 
     else 
     { 
      if( capture.retrieve(depthMap,CV_CAP_OPENNI_BGR_IMAGE)) 

      { 
       /*IplImage* img = new IplImage(depthMap); 
       face=cvHaarDetectObjects(img,cascade,storage,1.1,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0)); 
       for(int i=0;i<(face?face->total:0);i++) 
       { 

         CvRect* r=(CvRect*)cvGetSeqElem(face,i); 
         CvPoint pt1={r->x,r->y}; 
         CvPoint pt2={r->x+r->width,r->y+r->height}; 
         cvRectangle(img,pt1,pt2,CV_RGB(0,255,0),3,4,0); 
         //imshow("depth map", depthMap); 
       }*/ 
       const float scaleFactor = 0.05f; 
       //Mat show; depthMap.convertTo(show, CV_8UC3, scaleFactor); 
       imshow("depth map", depthMap); 
    //   } 



     } 

     if(waitKey(30) >= 0) 
      break; 
    } 
} 

    } 
    catch(cv::Exception& e) 
    { 
     const char* err_msg = e.what(); 
     std::cout << "exception caught: " << err_msg << std::endl; 
    } 
    return 0; 
} 

...有人請幫我出

+2

您需要提供有關您無法完成的確切部分的一點信息。發佈一段代碼並說「不起作用」並不是提出問題的最有效方式。 – misha

+0

嘗試重新表達您的問題。問題究竟在哪裏?你能夠檢索BGR圖像嗎? –

回答

0

cvHaarDetectObjects僅適用於灰度圖像或矩陣類型CV_8U。
因此,您必須在從Kinect中檢索RGB圖像後進行轉換。

cvtColor(frame, frame_gray, CV_BGR2GRAY); 

另外我看到你將depthMap命名爲RGB圖像,這可能會令人困惑。