我正在尝试在Windows上 编译Python的Open Kinect驱动程序我用CMake(链接)创建了一个Make文件,并尝试用VC++ Express编译它.
除了Python包装器之外,所有内容似乎都可以正常编译(查看器示例正常工作).我更改了freenect的输出文件夹,它将freenect.lib放在另一个文件夹中以防止发生冲突.当我改变它并尝试编译cython_freenect时,我得到:
1>------ Build started: Project: ZERO_CHECK, Configuration: Release Win32 ------
2>------ Build started: Project: freenect, Configuration: Release Win32 ------
2> Creating library C:/IvoPython/Kinect/Driver/lib/Release/freenect.lib and object C:/IvoPython/Kinect/Driver/lib/Release/freenect.exp
2> freenect.vcxproj -> C:\IvoPython\Kinect\Driver\Release\freenect.dll
3>------ Build started: Project: freenect_sync, Configuration: Release Win32 ------
3> Creating library C:/IvoPython/Kinect/Driver/lib/Release/freenect_sync.lib and object C:/IvoPython/Kinect/Driver/lib/Release/freenect_sync.exp
3> freenect_sync.vcxproj -> C:\IvoPython\Kinect\Driver\Release\freenect_sync.dll
4>------ Build started: Project: cython_freenect, Configuration: Release Win32 ------
4>LINK : fatal error LNK1149: output filename matches input filename 'C:\IvoPython\Kinect\Driver\lib\Release\freenect.lib'
========== Build: …Run Code Online (Sandbox Code Playgroud) 目标是在不同的背景上显示人(也称为背景移除).
我正在使用Kinect和微软的Beta Kinect SDK这样做.借助深度,背景被过滤,我们只得到人的形象.
这很简单,我们可以找到在Internet上无处不在的代码.然而,深度信号是有噪声的,并且我们得到不属于所显示的人的像素.
我应用了边缘检测器来查看它是否有用,我目前得到了这个:

这是另一个没有边缘检测:

我的问题是:我可以通过哪种方式摆脱这些嘈杂的白色像素?
我尝试了形态学操作,但身体的某些部分被擦除,仍留下白色像素.
该算法不需要是实时的,我可以在按下"保存图像"按钮时应用它.
我只是尝试用形状边框上最近的帧做背景减法.你看到的单个像素是闪烁的,这意味着它是噪音,我可以很容易地摆脱它们.

该项目现已结束,这就是我们所做的:使用OpenNI驱动程序手动校准Kinect,该驱动程序直接提供红外图像.结果非常好,但每次校准都是针对每个Kinect的.
然后,我们在边框上应用了一点透明度,结果看起来非常棒!但是,我无法提供图片.
我想跟踪第一个人,并使用此人的右手导航我制作的应用程序.
我可以接管光标,现在我只想跟踪一个人.所以基本上当一个人在节目中导航,并且有人走在他身后或正在寻找这个人时,如果他们移动,那么kinect就不应该认出其他人.
我怎么能实现这一点,我知道它与trackingId什么有关呢?:■
foreach (SkeletonData s in allSkeletons.Skeletons)
{
if (s.TrackingState == SkeletonTrackingState.Tracked)
{
if (s.TrackingID == 0)
{
foreach (Joint joint in s.Joints)
{
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在将Microsoft SDK Beta代码转换为2012年2月发布的Microsoft SDK官方发行版.
我添加了一个通用PauseKinect()来暂停Kinect.我的暂停只会删除更新图像的事件处理程序
internal void PauseColorImage(bool isPaused)
{
if (isPaused)
{
_Kinect.ColorFrameReady -= ColorFrameReadyEventHandler;
//_Kinect.ColorStream.Disable();
}
else
{
_Kinect.ColorFrameReady += ColorFrameReadyEventHandler;
//_Kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
}
}
Run Code Online (Sandbox Code Playgroud)
即使我正在删除事件,为什么它仍然被触发?
此外,当我暂停彩色图像时,我也会在其对象中暂停深度和骨骼.
如果我取消注释我的代码它可以正常工作,但是它将永远重新初始化,这不是我想要做的.
public void AddHandler(EventHandler<T> originalHandler)
{
if (originalHandler != null)
{
this._actualHandlers.Add(new ContextHandlerPair<T, T>(originalHandler, SynchronizationContext.Current));
}
}
public void RemoveHandler(EventHandler<T> originalHandler)
{
SynchronizationContext current = SynchronizationContext.Current;
ContextHandlerPair<T, T> item = null;
foreach (ContextHandlerPair<T, T> pair2 …Run Code Online (Sandbox Code Playgroud) 我在XNA上使用Kinect(Microsoft SDK).我想用GRATF进行标记识别
如何将Kinect的数据转换ColorImageFrame为System.Drawing.Bitmap或者AForge.Imaging.UnmanagedImage我可以使用GRATF处理它们?
void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
Bitmap bitmap = null;
ColorImageFrame frame = e.OpenColorImageFrame();
byte[] buffer = new byte[frame.PixelDataLength];
frame.CopyPixelData(buffer);
// how to convert the data in buffer to a bitmap?
var glyphs = recognizer.FindGlyphs(bitmap);
...
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Kinect for Windows SDK来创建一个用于执行的应用程序(使用C#).
基本上我需要跟踪指挥的一只手(通常是右手)并识别他的指挥速度(BPM)以通过MIDI将该值发送到另一个应用程序.
我开始是SkeletonFramesReadyEvent添加JointType.HandRight了DateTime.Now.Ticks时间戳历史List被更新和删除中的第一项.我保持60帧(2秒)的历史.
我通过搜索最后的低点和高点计算BPM Joint.Position.Y,然后计算差值和除法bpm = 60*ticksPerSecond/diff.但结果是错误的.还有另一种方法吗?我错过了什么?
这是我到目前为止使用的:
public int DetectBPM(JointType type)
{
// we have not history yet
if (!HasHistory()) return 0;
// only calculate every second
var detectTime = DateTime.Now.Second;
if (_lastBPM != 0 && _lastBPMDectect == detectTime) return _lastBPM;
// search last high/low boundaries
var index = (int) type;
var list = History[index];
var i = list.Count - 1;
var lastHigh = list[i]; …Run Code Online (Sandbox Code Playgroud) 我是关于opencv(c ++)和kinect的新手.我尝试用kinect的c ++拍摄视频图像.我到处搜索,但我没有找到任何东西.因为人们使用openNI或OpenKinect.我不想使用这个lib.我该怎么做??
谢谢!!!
我已经设置了一个Kinect设备,并编写了一个简单的程序,使用OpenNI 2.0将流读取到QImage.我已经用NiTE 2.0建立了骨架跟踪,所以我可以访问所有15个关节的坐标.我还使用SceniX设置了一个简单的场景.由骨架跟踪提供的手坐标用于绘制2个框以表示手.
我想将整个骨架绑定到(操纵)模型,似乎无法找到任何好的教程.任何人都知道我该怎么办?
我们正在开发一个应用程序,必须由可能有一些涉及使用kinect来移动光标的视觉问题的人使用,因此我们需要使它比平常更大.但是,此应用程序不直接与kinect接口,因此我们无法使用其API.
我们使用WPF在C#(.NET 4.5)中编程.问题是在高分辨率设备中默认光标大小不能大于32x32像素或64x64像素.
我们首先尝试使实际的鼠标光标不可见,然后使用Graphics对象,使用Graphics.FromHwnd(applicationWindowHandler).它成功绘制图像,但它留下了过去光标位置的踪迹.
有没有办法使用常规的Windows鼠标光标,或至少一种方法来删除跟踪(如强制当前窗口刷新的"无效"方法)?
我们已经尝试过这些解决方案,但没有运气:
www.hsys.com/CustomCursorArticlePart1.htm
www.hsys.com/CustomCursorArticlePart2.htm
csharparticles.blogspot.it/2005/03/custom-drawing-cursors.html
我试图使用Media Flow Tracker根据区域跟踪我的手,但是一段时间后边界框会不断增加.它在前10秒左右正常工作.
这是一段代码片段:
def main():
display = SimpleCV.Display()
cam = Kinect()
ts = []
bb = None
img = cam.getDepth().flipHorizontal()
while display.isNotDone():
depth = cam.getDepth().flipHorizontal()
filtered = depth.stretch(0, 180).binarize().dilate(1)
if bb is None:
blobs = filtered.findBlobs()
if blobs:
hand = blobs.filter(abs(7000 - blobs.area()) < 500)
print hand
if hand:
bb = hand[0].boundingBox()
print bb
if bb is not None:
ts = filtered.track("mftrack", ts, img, bb)
if ts:
ts.drawBB()
ts.showPixelVelocityRT()
ts.drawPath()
filtered.show()
Run Code Online (Sandbox Code Playgroud)