目标是在不同的背景上显示人(也称为背景移除).
我正在使用Kinect和微软的Beta Kinect SDK这样做.借助深度,背景被过滤,我们只得到人的形象.
这很简单,我们可以找到在Internet上无处不在的代码.然而,深度信号是有噪声的,并且我们得到不属于所显示的人的像素.
我应用了边缘检测器来查看它是否有用,我目前得到了这个:

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

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

该项目现已结束,这就是我们所做的:使用OpenNI驱动程序手动校准Kinect,该驱动程序直接提供红外图像.结果非常好,但每次校准都是针对每个Kinect的.
然后,我们在边框上应用了一点透明度,结果看起来非常棒!但是,我无法提供图片.
我有一个小项目,我使用SDL,我正在玩不同的可用驱动程序.我遇到了aalib驱动程序,我意识到从未调用过SDL_KEYUP事件.
然而,这仅在某些条件下发生.使用X驱动程序时会发送事件,但在控制台模式下使用时则不会发送(即使用Ctrl + Alt + F1).
这是一个测试这个的最小代码:
#include <SDL/SDL.h>
#include <stdio.h>
int main()
{
SDL_Init(0);
SDL_SetVideoMode(64, 64, 32, SDL_SWSURFACE);
while(1)
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
if(event.type == SDL_KEYDOWN)
printf("Key down: %d\n", event.key.keysym.sym);
else if(event.type == SDL_KEYUP)
printf("Key up: %d\n", event.key.keysym.sym);
else if(event.type == SDL_QUIT)
SDL_Quit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,用aalib运行它:
env SDL_VIDEODRIVER=aalib ./a.out
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是否被视为一个错误?或者它是aalib无法知道的,因为控制台不会提供这些信息?
如果aalib无法获得这些信息,我觉得很遗憾SDL无法为其所有驱动程序提供相同的功能.
操作系统:FreeBSD 8.2
SDL版本:1.2.14
我最近遇到了一些C++代码,如下所示:
if(test_1)
if(test_2)
{
// Do stuff
}
else
exit(0);
Run Code Online (Sandbox Code Playgroud)
这是不明确的,因为编译器可以将其视为:
if(test_1)
{
if(test_2)
{
}
else
{
}
}
Run Code Online (Sandbox Code Playgroud)
或作为:
if(test_1)
{
if(test_2)
{
}
}
else
{
}
Run Code Online (Sandbox Code Playgroud)
是否根据任何标准(C,C++)定义了此代码的行为?我在VC++的C++程序中看到了这段代码,它似乎更喜欢第一个解决方案.