当前位置:首页 > 计算机 > 计算机应用 >

初试利用Opencv完成视频识别

分享到:
作者:秩名。 TAGS:视频,识别,完成,利用,我们,一个,
   视频识别、模糊处理技术,是近年来比较活跃的研究领域。由于计算机硬件技术的深远发展,使得高性能处理器、大容量存储硬盘和高清晰度摄像机越来越普及。但是,以此相适应的视频处理软件却相对处于滞后状态。不难想象,视频识别领域取得的进展,将给我们的信息处理行业带来巨大的影响。很多领域都可以应用这项技术,包括智能交
通、数字监控,甚至是导弹的末端制导。
  什么是OpenCV
   OpenCV是一个计算机图像、视频处理的算法库。它既可以运行在Windows中,也可以运行在Unix系统中,这给嵌入式系统的开发与应用提供了方便。OpenCV是一个开源软件,没有商业、科研应用的限制。曾经有人问我匹配,你简单地说一下,OpenCV到底能做啥?我只能说:“它其实什么也做不了”。OpenCV是一个算法的集合,包含了很多最近比较常见的图像、视频算法,比如开运算闭运算、取轮廓的“Canny算子”、高斯模糊等等。大部分的视频算法都有其适用范围,有其局限性,单一的算法通常无法取得很好的效果。从某种意义上来说,OpenCV更象一本论文集,这些论文是以代码形式表现的。
   当我们开始搞视频处理系统时,通常没有必要从零开始。我们总不好意思从RGB到HSV的转换开始写起吧?那样过于费时费力。我们自己写的模块经常会碰到效率的问题,需要花很多时间来优化。有些算法本身也很繁琐,比如Mpeg和H.264的编解码器。这时我们就可以利用OpenCV的库函数,从而节省爱好者大量时间。
   OpenCV诞生于Intel研究中心。在那里,Intel开发团队实现了最初的编码。一般认为,这些库函数是高起点的,它的效能得到过测试。关于OpenCV更多的介绍,请参照OpenCV的网站。
  尝试Canny算子
  大部分参考文章介绍图像识别,总是先从图像分割开始。一提到图像分割,就会说起边缘提取。顺着这个思路,我利用OpenCV做了一些测试。我用数字摄像机拍摄了一些公路的视频。
  图1
   图1是摄像机实际拍摄的一个街景(为便于讨论进行了缩小)。迎面驶来的面包车由于速度比较快,产生了一些模糊;人行道上还慢速行使两辆出租车。OpenCV介绍了几种提取边界的方法,包括Sobel算子、Scharr滤波器、拉普拉斯变换和Canny算子。就以Canny算子为例,我们发现,只需要区区几行程序匹配,就可以获得Canny算子的轮廓效果。
  1.利用函数cvLoadImage打开指定的图像文件。
  2.利用cvCvtColor将也颜色空间从 RG
[论文网 lunwen.nangxue.com]B转换到HSV。再利用cvSplit函数提取V分量。Canny算子要求源图像为单通道图像。一般认为,亮度分量可以最好地体现轮廓信息。
  3.调用函数cvCanny实现Canny算子,在这里,取上下阈值为150和100。
  结果如下图所示。
  图2
   我们发现,面包车和小汽车的轮廓得到了很好的提取。树后的出租车信息丢失殆尽。噪声信息,比如树木、公路标线都表现出来。实践表明:Canny算子是一个高效的算法,可以实现大分辨率下视频同步分析。
  调整Canny算子的两个阈值,我们可以调整结轮廓的“精细程度”。为了显露出树后面的出租车,我曾经把轮廓调整得非常精细。但是我发现,我完全陷入轮廓线的汪洋大海中。无数轮廓好像油画的裂纹一样,非常密集,任何后续操作都无从谈起了……即使如图2所示的轮廓,我们也很难提取出机动车的外延。更何况两辆机动车互相有重叠的情况呢?风中摇曳的树木是轮廓提取的难题,他们产生了无数轮廓线。这些轮廓线可以“包含”任何形体,人脸、机动车、道路、房子,任何你想要的轮廓都可以在树的轮廓线中“想象”出来。
  轮廓匹配
   OpenCV提供了一个完整的、与实际应用相关的例子——识别人的脸部区域。这个看似简单的需求,对于计算机系统而言,其实并不容易!这是一个三维的世界。摄像机见到的东西是三维世界的二维投影。这个投影过程中就失去了很多信息。
   但是,一个3岁小孩可以一眼认出他的妈妈。难道计算机还不如3岁小孩吗?从已知的视频识别系统来说,差不多是这样……小孩有妈妈的记忆,或者说他有先验知识,这些先验知识是他识别出妈妈的重要依据。当孩子妈妈抬头和低头的时候,她的面部像素剧烈改变。孩子已经记住了妈妈抬头和低头的特征匹配,还有妈妈测过脸时的特征,背过身去的特征,站着坐着的特征。孩子通过观察妈妈的影像,就可以匹配出母亲的特征。这是一个影像+先验知识的综合过程。所以孩子通常可以在任意角度任意距离识别出妈妈。
   我测试了
  • 共3页:
  • 上一页
  • 1
  • 2
  • 3
  • 下一页