目錄
- 寫在最前
- 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,

完成后就可以安裝,基本上都是默認操作,安裝完成后,電腦上就會多出三個東西,如下,

這三個軟體,各有用處,目前我用到的只有SDK Browser v2.0和Kinect Studio v2.0,另外一個還有沒摸索到它的用途,先暫且不管,另外這兩個軟體在測驗kinect連接是否成功時,可用作測驗,
1.2測驗kinect是否連接成功
kinect必須連接USB3.0,首次連接,需要安裝驅動,可以在設備管理器中檢查kinect的驅動是否安裝好,因為我是先連接的kinect,后安裝的SDK,所以手動安裝了驅動,但是看到網上有些大佬說安裝SDK后就不需要再手動更新驅動,所以自行辨別,如果安裝了SDK還是沒有驅動就手動更新驅動就可,
驅動安裝完成后就可以進行測驗,因為寫文章的時候,kinect不在身邊,無法展示自己的測驗程序,但還是可以參照這位大佬的文章,之后我會將我的測驗程序加上,多多包涵!
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的開發包


完成之后,在【解決方案資源管理器】中的參考就包含這些:

完成參考后就可以進行開發了,
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();
}
}
}
因為寫文章時,東西不在身邊,所以無法展示實際效果,之后補上,抱歉,
4 結語
第一次寫博客,有不好的地方多多包涵,也希望大家對我說的做的不好的地方多多指點!
之后的作業也會陸續更新,需要的朋友多多關注,十分感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/210645.html
標籤:java
