使用通用网络摄像头进行物体检测

时间:2011-03-09 22:12:28

标签: java c++ object opencv detection

这是我想用尽可能少的努力解决的任务(最好使用QT& C ++或Java):我想使用网络摄像头视频输入来检测前面是否有(或更多)板条箱相机镜头与否。当凸轮将其视频信号馈送到我的应用程序时,场景可以从“清除”变为“镜头前面有一个板条箱”。对于原型测试/学习,我有2-3个“空”场景的图像,以及2-3个带有一个或多个板条箱的图像。

您是否知道如何解决此任务的直截了当的想法?我发现OpenCV,但这个框架对于这个简单的任务来说不是太笨重吗?我是计算机视觉领域的新手。这通常是一项艰巨的任务,还是简单而强大,可以检测现场直播中凸轮前面是否有障碍物?非常感谢您的专家意见!

5 个答案:

答案 0 :(得分:2)

这是我听说过的一种方法,可能会取得一些成功:

  • 对图像执行边缘检测,将其转换为黑白图像,边缘显示为黑色像素。
  • 现在创建一个直方图,以记录图像中每个垂直像素列中的黑色像素的频率。这里的理论是,一个桶内或周围的直方图中的高频值表示垂直边缘,可能是板条箱的边缘。

您还可以考虑使用第二个直方图来测量图像每一行的像素。

显然,这是一种相当简单的方法,并且高度依赖于“简单”输入;即在空白背景下具有“硬”边缘的普通盒子(最好是与盒子形成鲜明对比的背景)。

答案 1 :(得分:0)

您不需要一个完整的计算机视觉库来检测相机前面是否有板条箱或没有板条箱。您可以拍摄快照并制作颜色直方图(简单)。要捕获快照,请查看此处:

  

http://msdn.microsoft.com/en-us/library/dd742882%28VS.85%29.aspx

答案 2 :(得分:0)

这里有很多变量,包括环境照明和视野中任何其他活动的任何可能变化。看看实现一个Canny边缘检测器(OpenCV还有Intel Performance Primitives也有)可以查找感兴趣的形状轮廓。如果你有点知道盒子的位置,你可以在感兴趣的区域中对像素求和。如果该框可以出现在视野中的任何位置,则更具挑战性。

答案 3 :(得分:0)

这不是你应该从Java开始的。当我遇到这种问题时,我会从Matlab(OpenCV库)或类似的东西开始,看看解决方案是否可以在那里工作,然后将其移植到Java。

为了回答你的问题,我做了类似的事情,通过将当前图像与“参考”图像(在你的情况下没有箱子)进行异或,然后对直方图进行处理(右边的聚集像素意味着差异很大)或者只是求和可见像素并将其与阈值进行比较。 XOR不是很精确但速度很快。

我的观点是,我花了2个小时来安装Scilab和工具包并编写概念证明。如果第一个解决方案不能使用其他算法(已经在Mat- / Scilab中完成),则需要花费两天时间在Java中。恕我直言,你正在从错误的角度解决问题。

如果真的Java / C ++只是一些无关紧要的简单工具,那就放弃它们并使用Scilab或其他一些Matlab克隆 - 原型设计和微调会更快。

答案 4 :(得分:0)

物体检测涉及2个部分。一个是特征提取,另一个是相似度计算。板条箱的一些明显特征是几何,边缘,纹理等......

因此,您可以找到一些算法来从您的箱子图像中提取这些功能。然后将这些特征与训练样本图像进行比较。