我正在尝试制作一个 DIY 触摸屏,并希望将其参加当地的科学博览会,但想在多点触控的编程方面进行。我的问题在于我从未使用过分析图像(来自基于 USB 的网络摄像头)。
如果可能的话,我想在 C# 中做这个项目(C++ - 如果最坏的情况发生)
我需要分析一张黑色图片(来自 USB 网络摄像头),然后检测何时出现白色斑点。我该怎么做呢?---是否有一种已知的方法来检测变化与分析每个像素?如果是这样,指向这里的指针会很好:)
另外,我如何通过 USB 从网络摄像头获取输入?--- 我在哪里可以获得图书馆/ddl 的?
我见过一些可以使用这个的程序,但是它们会转换图像——这会占用时间和处理器速度……有没有办法使用原始输入图像/数据?
帮助?
4 回答
一旦你有你的输入,你将有(假设它是完全黑暗和完全明亮的对比度),你将有一个与此类似的值矩阵:(灰度)
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 256 0 0 0 0 0
0 0 0 0 0 256 256 256 0 0 0 0
0 0 0 0 0 0 256 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
您的工作需要分割出正确颜色值 (256) 的部分并确定位置。要获得运动 [假设您只跟踪 1 个对象],您必须将 blob 的下一个位置与前一个位置进行比较。
在现实世界中,尤其是使用网络摄像头时,您永远不会获得具有良好对比度的纯色背景。网络摄像头分辨率低,光线永远不会完美,并且镜头和 CCD 缺陷/颜色近似会增加噪点。
此外,您可能会遇到跟踪 blob 运动的问题(一个 blob 可能在表面的其他地方被错误检测。当您尝试跟踪两个 blob 时,您会遇到更多问题。
其中一些问题包括:
- Blob 碰撞(你怎么知道哪个 blob 去哪里)
- 斑点交叉(斑点是否交换了侧面,或者斑点是否从先前的行程反向移动)
- Blob 组合(两个 Blob 合二为一)
要使用 C# 抓取相机,您可能需要检查一下。WIA 不是用于拍照的最快方法。但是,它更容易处理。如果您仍然对此感兴趣,我对您的建议是在 Photoshop 中绘制两张图像并跟踪标记。它没有那么令人兴奋,但它会帮助您更轻松地解决问题并放松问题描述。
你想要的是“斑点检测”。这是一个关于blob 库的好帖子
那里已经有大量多点触控/计算机视觉库和软件。这种东西的最佳资源是wiki.nuigroup.com。特别是框架和库部分。目前那里没有太多 C# 信息,但如果您确实发现了一些东西,请确保将其放在该 wiki 上供所有人使用。
还有NuiGroup 论坛 C# (.NET/Silverlight/WPF) 部分应该对您有很大帮助。在该社区中可以提供一些很大的帮助。
作为开始使用网络摄像头的地方,我将从这里开始:
http://www.hanselman.com/blog/CapturingVideoAWebCameraUsingWIANotPossible.aspx
您将获得一些链接,但我建议您从这里开始,因为这是 Scott 讨论不同挑战和常见问题并提供更多信息链接的文章。
要从网络摄像头获取图像,AForge框架非常易于使用!查看运动检测示例应用程序以获取代码:)