【发布时间】:2014-08-31 04:48:59
【问题描述】:
我正在尝试使用带有以下代码的 kinect 检测人脸。当我使用计算机的摄像头时,OpenCV 的 detectMultiScale() 可以正确检测人脸,但它似乎无法处理来自 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) );
}
任何想法为什么会发生这种情况?
谢谢!
【问题讨论】:
-
您为 Kinect 使用的驱动程序是什么? Freenect 还是 OpenNI?检查来自 Kinect 的图像是 BGR 还是 RGB。
-
@blackibiza - 我正在使用 OpenNI。我尝试了 CV_BGR2GRAY 和 CV_RGB2GRAY 程序仍然没有检测到任何人脸
-
您是否尝试过保存来自 kinect 的图像以检查一切是否如您所愿?在尝试在这张图片中运行 opencv 算法以检查该算法是否适用于这张图片之后......
-
@Stralo 认为从 Kinect 检索帧与普通相机的过程不同。使用 OpenNI(我希望您使用带有 avin2 补丁的 1.5.x)您必须首先调用 grab() 然后在 VideoCapture 上调用 retrieve()。
-
@blackibiza - 是我的错,伙计们。对不起。我的 haarcascade 文件位于包含我的源代码的文件夹中,而不是可执行文件所在的位置,我刚刚意识到,因为 classifier.load() 函数不会引发任何错误。我会删除帖子
标签: c++ opencv face-detection openni