4

使用 EmguCV,要从我们使用的网络摄像头捕获图像:

Capture cap = new Capture(0);

Image < Bgr, byte > nextFrame = cap.QueryFrame();

...

...

但我不知道如何从我的 Kinect 捕捉图像,我尝试过kinectCapture上课,但它对我不起作用。谢谢

4

2 回答 2

11

基本上,您需要从 ColorStream 中捕获图像并转换为 EmguCV Image 类:

从 Windows 位图 (Kinect ColorStream) 转换为 EmguCV 图像:

您有一个 Windows 位图变量,其中包含 Kinect 框架。

Bitmap bmap = new Bitmap(weightFrame,HeightFrame,System.Drawing.Imaging.PixelFormat.Format32bppRgb);

...

//Here is the code where you capture the image in the ColorFrameReady....

...

Image<Bgr,Byte> frameActualKinect = bmap.ToOpenCVImage<Bgr, Byte>();

进行检测:

调整大小

currentFrame = frameActualKinect.Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

//Convert it to Grayscale

gray = currentFrame.Convert<Gray, Byte>();

//Face Detector

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,new System.Drawing.Size(20, 20));

PD(辅助方法):

public static Image<TColor, TDepth> ToOpenCVImage<TColor, TDepth>(this Bitmap bitmap)
        where TColor : struct, IColor
        where TDepth : new()
    {
        return new Image<TColor, TDepth>(bitmap);
    }
于 2012-08-21T12:01:24.017 回答
2

使用 EmguCV 时,您通常使用另一个库来访问 Kinect。例如,Kinect For Windows SDKOpenNI。然后在使用 OpenNI 或 SDK 访问相机后,您可以使用 EmguCV 的工具编辑您在屏幕上投影的图像。这是一些如何将 EmguCV 与 OpenNI 和 SDK 一起使用的链接

希望这可以帮助!

于 2012-08-06T14:40:14.743 回答