【发布时间】:2012-02-28 16:47:36
【问题描述】:
我目前正在使用 Emgu CV 和 Kinect for Windows SDK v1 开发人脸检测 WPF 应用程序。我以前使用 Emgu CV 制作过相同的应用程序,但使用网络摄像头捕获图像帧。使用网络摄像头,获取相机帧并将其转换为 Emgu CV 中的 Image 类型并不难,以便我可以使用人脸检测算法对其进行处理。但是现在,当我使用 Kinect 硬件的彩色 RGB 相机时,我不能这样做。从 ImageColorFrame 类型(在 Kinect for Windows SDK 中)到 Image 类型(在 Emgu CV 中)的隐式或显式转换都不起作用。我怎么能这样做?
仅供参考,我也尝试分配 Image 类型的 bytes 属性,而不是进行转换,如下面的代码。但它也不起作用。提前致谢。
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return;
}
byte[] pixels = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(pixels);
nextFrame = new Image<Bgr, byte>(448, 336);
nextFrame.Bytes = pixels;
using (nextFrame.Bitmap = colorFrame.ToBitmap())
{
grayImage = new Image<Gray, byte>(448, 336);
grayImage = nextFrame.Convert<Gray, Byte>();
HaarCascade faceHaarCascade = new HaarCascade("" + Environment.CurrentDirectory + "\\haarcascade_frontalface_alt_tree.xml");
MCvAvgComp[][] facesDetected = grayImage.DetectHaarCascade(
faceHaarCascade,
1.1,
10,
Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
new System.Drawing.Size(20, 20));
foreach (MCvAvgComp face in facesDetected[0])
{
// draw rectangle in the facial image
nextFrame.Draw(face.rect, new Bgr(System.Drawing.Color.Blue), 2);
}
imageVideoRGB.Source = ToBitmapSource(nextFrame);
}
}
【问题讨论】:
-
这个答案:stackoverflow.com/a/10848309/1039947 展示了如何从 ColorImageFrame 获取位图,因此您可以尝试 nextFrame = new Image
(ImageToBitmap(colorFrame)); (ImageToBitmap 方法在那个答案中)