c#调用kinect和OpenCVsharp的环境配置

目录

  • 写在最前
  • 1 kinect环境搭建
    • 1.1 下载与安装kinect
    • 1.2测试kinect是否连接成功
  • 2 OpenCVSharp下载与配置
  • 3 VS2015+OpenCVSharp+kinect v2.0采集图像并显示
    • 3.1 引用工具包
    • 3.2应用:kinect采集图像并显示
  • 4 结语

写在最前

这个项目是我毕业设计的一些工作,这是第一次更新,之后也陆陆续续更新最新的成果,写下这些以作记录。所以如果有什么写的不够好的地方,希望各路神仙大佬多多包涵,指点一二。

我毕业设计的主要任务就是完成动态手势识别,并将其用在某一虚拟现实设备上,拓展交互方式

主要思路就是使用kinect采集图像,使用C#语言和OpenCVSharp进行处理,对手势进行识别,之后再将识别技术移植到交互方面。所以总的工作可以分成手势识别和交互拓展两个方面。

本文章是第一次对项目进行记录,所以主要介绍开发环境的搭建。欢迎各位大佬的交流!!

1 kinect环境搭建

我搭建kinect环境的平台为win10+vs2015+kinect v2.0

1.1 下载与安装kinect

kinect硬件的安装简单,购买回来的设备按照说明书的接线方式就可以完成,在此就不赘述。主要讲述SDK和驱动的安装。

首先,前往微软官网下载Kinect for Windows SDK 2.0。
在这里插入图片描述

完成后就可以安装,基本上都是默认操作。安装完成后,电脑上就会多出三个东西,如下。
c#调用kinect和OpenCVsharp的环境配置_第1张图片

这三个软件,各有用处,目前我用到的只有SDK Browser v2.0和Kinect Studio v2.0,另外一个还有没摸索到它的用途,先暂且不管。另外这两个软件在测试kinect连接是否成功时,可用作测试。

1.2测试kinect是否连接成功

kinect必须连接USB3.0,首次连接,需要安装驱动,可以在设备管理器中检查kinect的驱动是否安装好,因为我是先连接的kinect,后安装的SDK,所以手动安装了驱动,但是看到网上有些大佬说安装SDK后就不需要再手动更新驱动,所以自行辨别,如果安装了SDK还是没有驱动就手动更新驱动就可。

驱动安装完成后就可以进行测试。之前安装的kinect的SDK时出现的软件就可以派上用场了。

  1. kinect studio
    打开kinect studio后显示的界面如下所示。
    c#调用kinect和OpenCVsharp的环境配置_第2张图片
    单击左上角的“Not connect”左边的图标,就可以连接到kinect,结果如下(如果没有反应,检查下硬件是否连接好以及前面的过程是否有遗漏)。
    c#调用kinect和OpenCVsharp的环境配置_第3张图片
    这个界面有些其他的作用,大家如有需要自行探索。

  2. SDK Browser v2.0

这个软件是一个很有作用的工具,里面有很多开发样例可以参考,大致界面如下。
c#调用kinect和OpenCVsharp的环境配置_第4张图片
首先我们介绍一下使用这个软件进行测试kinect的连接状况,点击Kinect Confuguration Verifier这一栏右下角的“Run”。
c#调用kinect和OpenCVsharp的环境配置_第5张图片
上面是我的运行结果,最好的状态是所有项都是绿√,但我这也能用,我就没有管那么多(感觉是电脑本身的问题)。到此基本上都测试完成了,可以快快乐乐地使用自己的kinect了。

此外在介绍下这个软件的作用,里面有一些很有意思的例程,大家根据个人喜好,自由测试,我这里就举一个例子,如下。
c#调用kinect和OpenCVsharp的环境配置_第6张图片
运行结果如下(我的脚被桌子挡住了,所以不是粗红线,嘿嘿!)
c#调用kinect和OpenCVsharp的环境配置_第7张图片

2 OpenCVSharp下载与配置

OpenCV是在图像处理方面是一款比较好用的工具,具体多好用大家心里就好。但是OpenCV并不支持C#语言,所以在使用C#语言的时候多有不便,于是OpenCVSharp就诞生了。

在C# 开发环境下加入OpenCVSharp开发包其实也并不难,详细可见下面这位大佬的文章,我老老实实按照他的步骤,完美的用上了OpenCVSharp。
在C#中使用OpenCV(使用OpenCVSharp)

说一下自己在配置过程的感受。在VS中配置OpenCVSharp的第二这种方式,下载OpenCVSharp之后手动配置,确实比较头大。网上各类包齐飞,比较杂乱。使用第一种方式直接配置好,非常方便,就是不的话,比较慢,容易失败。大家可以选择合适自己的方式吧!我在使用第二种方式的时候也遇到了一些错,这里给大家分享一下解决办法。

3 VS2015+OpenCVSharp+kinect v2.0采集图像并显示

3.1 引用工具包

在上一节中已经将OpenCVSharp的工具包导入到VS中,本节只讲述如何引用kinect的开发包。具体步骤为:

【解决方案资源管理器】→右击【引用】→【添加引用】→勾选【拓展】中关于kinect的开发包
c#调用kinect和OpenCVsharp的环境配置_第8张图片
c#调用kinect和OpenCVsharp的环境配置_第9张图片
完成之后,在【解决方案资源管理器】中的引用就包含这些:
c#调用kinect和OpenCVsharp的环境配置_第10张图片
完成引用后就可以进行开发了。

3.2应用:kinect采集图像并显示

using System;
using Microsoft.Kinect;
using OpenCvSharp;

namespace kinect11_8
{
    class Program
    {
        static void Main(string[] args)
        {
            KinectSensor _Sensor = null;
            ColorFrameReader _Reader = null;
           
            //获取kinect
            _Sensor = KinectSensor.GetDefault();

            if (!_Sensor.IsOpen)
            {
                Console.WriteLine("正在打开摄像头!");
                _Sensor.Open();
            }

            if (_Sensor != null)
            {
                //打开读取器
                _Reader = _Sensor.ColorFrameSource.OpenReader();

                //定义帧的描述
                var frameDesc = _Sensor.ColorFrameSource.FrameDescription;
                int iHeight = frameDesc.Height;
                int iWidth = frameDesc.Width;

                //OpenCVSharp数据预处理
                Mat mImg = new Mat(iHeight, iWidth,MatType.CV_8UC4);
                int tmp = iWidth * iHeight * 4 * sizeof(byte);
                uint uBufferSize = (uint) tmp;
                Cv2.NamedWindow("Color Map");
                Console.WriteLine("获取图像中!");

                while (true)
                {
                    if (_Reader != null)
                    {
                        //获取最新的图像
                        var frame = _Reader.AcquireLatestFrame();
                        if (frame != null)
                        {
                            //将获取到的数据储存到mImg.Data中
                            frame.CopyConvertedFrameDataToIntPtr(mImg.Data, uBufferSize, ColorImageFormat.Bgra);

                            //显示图像
                            Cv2.ImShow("Color Map", mImg); 
                            //释放帧                        
                            frame.Dispose();
                            frame = null;
                        }
                        else
                        {
                            Console.WriteLine("未获取到图像!");
                        }
                    }
                    
                    //任意键退出
                    if (Cv2.WaitKey(30) != -1)
                    {
                        break;
                    }
                }
            }
            //关闭摄像头
            _Sensor.Close();  
        }
    }
}

测试效果如下:
c#调用kinect和OpenCVsharp的环境配置_第11张图片

4 结语

第一次写博客,有不好的地方多多包涵,也希望大家对我说的做的不好的地方多多指点!

之后的工作也会陆续更新,需要的朋友多多关注,十分感谢!

最后给大家推荐一下kinect学习个人觉得比较有用的网站:

Kinect for windows微软中国体感官方网站(里面很多官网资料,可下载)

Kinect for Windows

配置Kinect2.0+Unity5.6开发环境

你可能感兴趣的:(c#,opencv,kinect)