2014-07-10 29 views
0

我正在嘗試使用下面的代碼使用kinect來檢測人臉。 OpenCV的detectMultiScale()在我使用我的電腦攝像頭時可以正確檢測臉部,但它似乎不能處理來自kinect的圖像。OpenCV未檢測到來自Kinect的人臉

Device device; 
VideoFrameRef colorFrame; 
VideoStream ColorStream; 
Mat colorImage, grayScaleFrame; 

colorStream.create(device, SENSOR_COLOR); 
colorStream.start(); 


while (1){ 
    colorStream.readFrame(&colorFrame); 
    const RGB888Pixel *imageBuffer = (const RGB888Pixel*)colorFrame.getData(); 
    colorImage.create(colorFrame.getHeight(), colorFrame.getWidth(), CV_8UC3); 
    memcpy(colorImage.data, imageBuffer, 3 * colorFrame.getHeight() * colorFrame.getWidth() * sizeof(uint8_t)); 

    //face detection 
    blur(colorImage, colorImage, Size(2, 2), Point(-1, -1), BORDER_DEFAULT); 
    cvtColor(colorImage, grayScaleFrame, CV_BGR2GRAY); 
    equalizeHist(grayScaleFrame, grayScaleFrame); 
    classifier.detectMultiScale(grayScaleFrame, faces, 1.1, 3, CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE, Size(30, 30)); 
} 

任何想法爲什麼會發生這種情況?

謝謝!

+0

這是您使用Kinect的驅動程序? Freenect還是OpenNI? 檢查來自Kinect的圖像是BGR還是RGB。 – madduci

+0

@blackibiza - 我正在與OpenNI合作。我試過了CV_BGR2GRAY和CV_RGB2GRAY,程序仍然沒有檢測到任何面孔 – Stralo

+0

您是否嘗試保存來自kinect的圖像以檢查一切是否如您所料?在嘗試運行這個單一圖像中的opencv算法以檢查該算法是否適用於此圖像... – api55

回答

0

確保您按照這些步驟抓住一個框架與Kinect的/ OpenNI(1.5.4.0+):

cv::Mat rgb_image, depth_map; 
cv::VideoCapture device.open(CV_CAP_OPENNI); 
//set RGB-Depth mapping 
device.set(CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION, 1.0); 

while(1) 
{ 
    device.grab(); 
    device.retrieve(rgb_image, CV_CAP_OPENNI_BGR_IMAGE); 
    device.retrieve(depth_map, CV_CAP_OPENNI_DEPTH_MAP); 
} 
+0

我正在使用Opencv 2.4和OpenNI2。我認爲上面的代碼不適用於OpenNI2:main.cpp:341:14:error:'class openni :: Device'沒有名爲'grab'的成員 main.cpp:342:14:error:'class openni :: Device'沒有名爲'retrieve'的成員。儘管謝謝! – Stralo

+0

OpenNI2不能與Kinect一起使用,除非您在Windows上,否則OpenNI2的Windows SDK + OpenKinect交叉補丁。 http://social.msdn.microsoft.com/Forums/en-US/a11ff6d9-7fbe-4636-8ff0-92d6220ac3f8/fyi-openni-2-is-available-uses-ms-kinect-sdk-drivers-when -using-kinect-sensor?forum = kinectsdk 在Linux上,沒有機會。 – madduci

+0

我正在使用OpenNI2和Kinect在Linux機器上工作,並且一切正常。 – Stralo