C# Kinect和EMGU(OpenCV)-位图源问题
好的,所以基本上我尝试将openCV与Kinect(微软新的Kinect 1.0 SDK)一起使用。我对C#和Kinect都很陌生。但是我想做的是使用EMGU(C#的openCV包装器)使用kinect进行面部识别。到目前为止,我已经成功地从kinect捕获了视频流,将其转换为EMGU图像,然后将其转换为Byte[]数组,以便我可以使用BitmapSource在屏幕上显示我的图像 虽然这很好,但当我尝试使用image类实际执行一些图像处理时,似乎会出现问题。它实际上似乎处理得很好,但不是很快。这对我来说不一定是个问题,但现在根本不显示BitmapSource 下面是我检测人脸的代码示例:C# Kinect和EMGU(OpenCV)-位图源问题,c#,opencv,kinect,emgucv,bitmapsource,C#,Opencv,Kinect,Emgucv,Bitmapsource,好的,所以基本上我尝试将openCV与Kinect(微软新的Kinect 1.0 SDK)一起使用。我对C#和Kinect都很陌生。但是我想做的是使用EMGU(C#的openCV包装器)使用kinect进行面部识别。到目前为止,我已经成功地从kinect捕获了视频流,将其转换为EMGU图像,然后将其转换为Byte[]数组,以便我可以使用BitmapSource在屏幕上显示我的图像 虽然这很好,但当我尝试使用image类实际执行一些图像处理时,似乎会出现问题。它实际上似乎处理得很好,但不是很快。这
img = new Image<Bgr, byte>(clone);
haar = new HaarCascade("directory");
Image<Gray, Byte> gray;
using (HaarCascade face = new HaarCascade("blablabla.xml"))
using (HaarCascade eye = new HaarCascade("blarg.xml"))
{
using ( gray = img.Convert<Gray, Byte>()) //Convert it to Grayscale
{
MCvAvgComp[] facesDetected = face.Detect(gray, 1.1, 1, mgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new System.Drawing.Size(img.Width / 8, img.Height / 8));
foreach (MCvAvgComp f in facesDetected)
{
img.Draw(f.rect, new Bgr(System.Drawing.Color.Blue), 2);
imgDoneProc = img.ToBitmap();
}
}
}
(PImage是来自Kinect的流;bmpBytes是从图像转换而来的字节[])
因此,如果我注释掉执行图像处理的代码,所有来回转换都可以正常工作。当我添加图像处理代码时,我可以向控制台写入一些有用的数据,但图像不会显示。我还注意到“bmapa”没有很快更新。这是唯一明显的区别,除了在image1中没有显示之外
那么,我是否错误地使用了BitmapSource,或者是否有办法提高我的代码速度,或者降低BitmapSource的“刷新率”?因为当我在数据结构之间转换时,我从kinect获得了一个稳定的流,并且一切正常
谢谢,
布伦特
BitmapSource bmapa = BitmapSource.Create(PImage.Width, PImage.Height, 96, 96, PixelFormats.Bgr32, null, bmpBytes, PImage.Width * PImage.BytesPerPixel);
image1.Source = bmapa;